gpt4 book ai didi

c++ - 在 C++ 中从格式化输入切换到未格式化输入

转载 作者:行者123 更新时间:2023-11-28 02:00:50 25 4
gpt4 key购买 nike

我有一个输入文本文件。第一行有两个 int号码 ab , 第二行是一个字符串。我想使用格式化输入来做 file >> a >> b ,然后无格式输入,一个一个得到字符串的字符。在这两个步骤之间,我需要跳过 '\n'第一行末尾的字符。我用过

  while(file.get()<=' ' && !file.eof());  // skip all unprintable chars
if(!file.eof()) file.unget(); // keep the eof sign once triggered

使输入格式更加灵活。用户现在可以分隔数字 ab从字符串中使用任意数量的空行 '\n' , 制表键 '\t' , 和/或空格键 ' ' -- 他有同样的自由来分开数字 ab .当每一行的结尾现在变成 "\r\n" 时,在 Linux 中读取从 Windows 复制的文本文件甚至没有问题。 .

有没有ifstream做同样事情的函数(跳过所有字符 <=' ' 直到到达下一个可打印字符或 EOF)? ignore函数似乎没有这样做。

最佳答案

是的,有:std::ws机械手。它会跳过空白字符,直到找到非空白字符或到达流的末尾。它类似于在 scanf 格式字符串中使用空白字符。

实际上,它在真正开始解析字符之前被格式化输入使用。

你可以这样使用它:

int x;
std::string str;
std::cin >> x >> std::ws;
std::getline(std::cin, str);
//...
//std::vector<int> vec;
for(auto& e: vec) {
std::cin >> e;
}
std::getline(std::cin >> std::ws, str);

关于c++ - 在 C++ 中从格式化输入切换到未格式化输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39677197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com