在C ++中,如何将文件内容读入字符串数组?我需要这个文件,由一对由空格分隔的字符组成,如下所示:
cc cc cc cc cc cc
cc cc cc cc cc cc
cc cc cc cc cc cc
cc cc cc cc cc cc
c可以是任何字符,包括空间!尝试:
ifstream myfile("myfile.txt");
int numPairs = 24;
string myarray[numPairs];
for( int i = 0; i < numPairs; i++) {
char read;
string store = "";
myfile >> read;
store += read;
myfile >> read;
store += read;
myfile >> read;
myarray[i] = store;
}
问题在于,这只会完全跳过空格,从而导致错误的值。我需要更改什么才能识别空格?
答案 0 :(得分:2)
这是预期的行为,因为默认情况下operator>>
会跳过空格。
解决方案是使用get
方法,这是一种低级操作,可以从流中读取原始字节而不进行任何格式化。
char read;
if(myfile.get(read)) // add some safety while we're at it
store += read;
顺便说一下,VLA(非常大小的数组)在C ++中是非标准的。您应指定常量大小,或使用vector
等容器。
答案 1 :(得分:1)
如果输入与您说的完全相同,则以下代码将起作用:
ifstream myfile("myfile.txt");
int numPairs = 24;
string myarray[numPairs];
EDIT: if the input is from STDIN
for( int i = 0; i < numPairs; i++) {
myarray[i] = "";
myarray[i] += getchar();
myarray[i]+= getchar();
getchar(); // the space or end of line
}
EDIT: If we don't now the number of pairs beforehand
we shoud use a resizable data structure, e.g. vector<string>
vector<string> list;
// read from file stream
while (!myfile.eof()) {
string temp = "";
temp += myfile.get();
temp += myfile.get();
list.push_back(temp);
myfile.get();
}