我有以下代码从文件中读取文本并将字符存储在向量中。但是,此代码不是读取空格并将其推入向量中。我尝试使用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();
答案 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);