将文件内容对的字符读入数组

时间:2011-10-02 03:36:49

标签: c++ arrays file-io

在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;
}

问题在于,这只会完全跳过空格,从而导致错误的值。我需要更改什么才能识别空格?

2 个答案:

答案 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();
}