我想遍历文件并打印所有字符串。例如,该文件包含:
a
1
2
10
a1
1
b
将输出:
a
a1
b
我写这样的代码:
int main(){
ifstream stream;
stream.open("example.txt");
string temp;
while (getline(stream, temp)){
cout<<temp<<endl;
int n;
while(stream>>n){}
}
}
此程序在线打印“a”和“a1”。和建议?
答案 0 :(得分:3)
以下情况如下:一旦你的程序到达这一行,
while(stream>>n){}
它尝试从文件中读取以下标记int
egers。 1
成功。
2
成功。
10
成功。
a1
失败。
stream
现在处于失败状态(stream.fail() == true
)。代码执行的下一个语句是
while (getline(stream, temp)){
此将读取下一个标记(a1
),但由于stream
处于失败状态,getline
的结果将被解释为{{ 1}},循环将被中断。
这就是你的课程过早结束的原因。但是,它甚至不应该打印false
。实际上,它只在我的机器上打印a1
。
在循环中吃掉整数标记后,需要清除失败状态。最后添加以下语句:
a
这会重置失败状态(stream.clear();
),外循环将继续运行。
答案 1 :(得分:1)
这个怎么样?
std::copy_if(std::istream_iterator<string>(stream), std::istream_iterator<string>(),
std::ostream_iterator<string>(std::cout),
[](std::string const& rhs) { return !std::isdigit(rhs[0]); })
答案 2 :(得分:0)
如果string不为空,并以字母开头,对吗?
if (temp.size() > 0 && isalpha(temp[0]))
{
cout << temp;
}