C++ c++;ifstream行的末尾
我有一个文件如下所示:C++ c++;ifstream行的末尾,c++,char,fstream,end-of-line,C++,Char,Fstream,End Of Line,我有一个文件如下所示: e r g d g d f h d r h f .......... 我想把这些字符存储在一个二维数组中 #include <fstream> #include <iostream> using namespace std; int main() { ifstream file("file.txt"); char c[20][20]; int i = 0, j = 0; while(!file.eof())
e r g d g d
f h d r h f
..........
我想把这些字符存储在一个二维数组中
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream file("file.txt");
char c[20][20];
int i = 0, j = 0;
while(!file.eof())
{
while(!end of line?)
{
file >> c[i][j];
j++;
}
i++;
}
.....
}
#包括
#包括
使用名称空间std;
int main()
{
ifstream文件(“file.txt”);
字符c[20][20];
int i=0,j=0;
而(!file.eof())
{
而(!行尾?)
{
文件>>c[i][j];
j++;
}
i++;
}
.....
}
我该怎么做或者如何查找一行中的字符数?您不能像您那样使用
eof()
。您必须先执行I/O读取操作,然后才能使用eof()
对于您正在尝试的内容,您应该使用std::getline()
,例如:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <algorithm>
int main()
{
std::ifstream file("file.txt");
std::string line;
char c[20][20] = {};
for (int i = 0; i < 20; ++i)
{
if (!std::getline(file, line))
break;
std::istringstream iss(line);
for(j = 0; j < 20; ++j)
{
if (!(iss >> c[i][j]))
break;
}
}
...
return 0;
}
或者:
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>
typedef std::vector<char> CharVector;
std::istream& operator>>(std::istream &in, CharVector &out)
{
out.clear();
std::string line;
if (std::getline(in, line))
{
std::istringstream iss(line);
std::copy(
std::istream_iterator<char>(iss),
std::istream_iterator<char>(),
std::back_inserter(out)
);
/* which is equivalent to:
char ch;
while (iss >> ch) {
out.push_back(ch);
}
*/
}
return in;
}
int main()
{
std::ifstream file("file.txt");
std::vector<CharVector> c;
std::copy(
std::istream_iterator<CharVector>(file),
std::istream_iterator<CharVector>(),
std::back_inserter(c)
);
/* which is equivalent to:
CharVector cv;
while (file >> cv) {
c.push_back(cv);
}
*/
...
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
typedef std::vector CharVector;
std::istream&operator>>(std::istream&输入、CharVector&输出)
{
out.clear();
std::字符串行;
if(std::getline(in,line))
{
标准::istringstream iss(线);
复制(
std::istream_迭代器(iss),
std::istream_迭代器(),
标准:背向插入器(输出)
);
/*这相当于:
char ch;
while(iss>>ch){
向外。向后推(ch);
}
*/
}
返回;
}
int main()
{
std::ifstream文件(“file.txt”);
std::向量c;
复制(
std::istream_迭代器(文件),
std::istream_迭代器(),
标准:背向插入器(c)
);
/*这相当于:
CharVector cv;
while(文件>>cv){
c、 推回(cv);
}
*/
...
返回0;
}
char
不是二维数组每行的字符数是否相同?@tobi303我修正了它为什么在每行仅包含6个字符时使用char[20][20]
呢?你刚才说每行的字符数始终相同。。。。
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>
typedef std::vector<char> CharVector;
std::istream& operator>>(std::istream &in, CharVector &out)
{
out.clear();
std::string line;
if (std::getline(in, line))
{
std::istringstream iss(line);
std::copy(
std::istream_iterator<char>(iss),
std::istream_iterator<char>(),
std::back_inserter(out)
);
/* which is equivalent to:
char ch;
while (iss >> ch) {
out.push_back(ch);
}
*/
}
return in;
}
int main()
{
std::ifstream file("file.txt");
std::vector<CharVector> c;
std::copy(
std::istream_iterator<CharVector>(file),
std::istream_iterator<CharVector>(),
std::back_inserter(c)
);
/* which is equivalent to:
CharVector cv;
while (file >> cv) {
c.push_back(cv);
}
*/
...
return 0;
}