c++ - 从一行中解析整数

标签 c++ string parsing

我正在解析一个输入文本文件。如果我使用 getline() 一次获取一行输入,有没有一种方法可以搜索字符串以获取整数?我在想类似于 Java 中的 getNextInt() 的东西。

我知道该输入行中必须有 2 个数字;但是,这些值将由一个或多个空白字符分隔,因此我不能只转到特定位置。

最佳答案

有几点需要考虑:
假设您在每一行上有两个数字,后跟您不关心的文本。

while(inFile >> rows >> columns)
{
    // Successfully read rows and columns

    // Now remove the extra stuff on the line you do not want.
    inFile.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
}

另请注意,如果唯一分隔整数值的是“空白”,那么您甚至不需要使用 ignore() 行。

上面的 while() 有效是因为:运算符 >> 返回一个流对象(引用)。因为流对象是在 bool 上下文中使用的,所以编译器会尝试将其转换为 bool 值,并且流对象有一个转换运算符来执行该转换(通过在流上调用 good())。

需要注意的重要一点是不要使用这条线

while(inFile.eof())

如果你确实使用了这个,那么你就会陷入最后一行问题的陷阱。如果您已经阅读了所有数据,eof() 仍然是错误的(因为在您尝试阅读过去的 EOF 之前它不是真的)。所以文件中没有数据,但你仍然进入循环体。在您的代码中,然后执行 getline() 并失败(没有更多数据),现在设置了 EOF。循环其余部分的作用将取决于 inLine 的定义方式和位置。

您可以像上面那样使用这个测试。但是你也必须愿意在你使用过之后测试流是否正常。

while(inFile.eof())  // Should probably test good()
{
    getLine(inFile,inputline);
    if(inFile.eof()) // should probably test good()
    {
         break;
    }
}

关于c++ - 从一行中解析整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216068/

相关文章:

c++ - Qt5内存使用取决于窗口大小?

c++ - 如何像 std::string 一样为自定义 std::basic_string<> 特化类定义哈希类?

java - Android 日期至今的天数

java - 如何解决通用实例化问题?

parsing - 逻辑或与逻辑与 : which should be more binding?

c++ - 在线程中从 C++ 调用 Lua

c++ - 罗马转十进制

c++ - 关于双重销毁异常对象所需的解释

c# - 关于语法错误的子串,这个事实是真的吗?

parsing - 模板解析错误 : Can't bind to 'ng-class' since it isn't a known native property in Angular 2