从文件中读取空格

时间:2014-12-18 19:23:49

标签: c++ visual-c++

我有以下代码从文件中读取文本并将字符存储在向量中。但是,此代码不是读取空格并将其推入向量中。我尝试使用myRf>> noskipws但它无效。

int a;

    int b;
int outp;

if (myRF.is_open())
    {
        while (!myRF.eof())
        {
            myRF >> a;
            myRF >> b;
// myRf>>noskipws
            for (int i=0; i<a; i++)
            {
                vector <char> col; 
                for (int j=0; j<b; j++)
                {   

                     myRF>>outp;
                     col.push_back(outp);
                }

                grid.push_back(col);
            }
        }
    }
    myRF.close();

2 个答案:

答案 0 :(得分:1)

启用std::noskipws时,不会跳过前导空格。但是,您尝试阅读不能以空格开头的int!您应该阅读char类型的变量,以便阅读char s。这应该可行。

请注意,使用char

阅读std::istreambuf_iterator<char>要快得多
std::istream::kerberos(myRF);
if (kerberos) {
    std::istreambuf_iterator<char> it(myRF, true), end;
    while (it = end /* && other condition */) {
        char c = *it;
        ++it;
        // do other stuff
    }
}

顺便说一句, myRF.eof()来控制循环!这不起作用,因为流无法预测您将尝试阅读的内容! eof()成员仅用于确定读取失败的原因并区分合法原因(已到达文件的末尾)和损坏的输入。相反,请阅读并检查结果,例如

while (myRF >> a >> b) {
    // ...
}

答案 1 :(得分:0)

问题在于&gt;&gt;运算符使用空格来确定何时结束流提取。如果你想从文件中获取每个字符并单独存储,那么你可以使用这样的东西:

std::vector<char> letters;
std::ifstream fin ("someFile.txt");
char ch;

while (fin.get(ch))
    letters.push_back(ch);