Return 到输入文件一行的开头,C++

Return to the begin of a line of an input file , C++

我对 C++ 中的 fstream 有疑问。如果我打开一个文件,例如 test.txt,并且我想读取每一行以检查我获取的第一个值是否不是字符串。如果它不是字符串,则该行由数字组成 values.If 我检查第一个我丢失了我需要的第一个值。如果我想 return 到行首,我该怎么做?我试过 seekg(*,ios::cur) 但我不知道我必须回到多少位置 return 到行首。 谢谢

你想要做的是将这一行读入一个字符串,然后你可以使用 substr 剪切出你需要的内容,例如检查它是否是一个数字,然后读取下一行。

#include <fstream>
#include <string>

std::ifstream file( "file.txt" );
std::string line;

while( std::getline( file , line ) )
{
    line.substr( 0 , 2 ) // for example the first 2 positions
    // do your checks
}

如果您知道每一行都包含一定数量不变的值,则还有一种使用标记的方法。 如果您提供有关文件中实际数据的更多信息,我也许可以为您澄清。

我还建议检查字符串是否为空,甚至 trim 之前检查它以确保您没有空行或检查您不尝试的行字符串的大小剪掉不存在的东西。

如果我答对了你的问题,你想阅读每行中的第一个单词,然后使用该信息做一些事情,然后再次 return 到该行中的第一个字符。

ifstream fin;
string text;

fin.open("test.txt");
fin >> text;

text.size() 会给出第一个单词的长度,因为 >> 运算符只读到第一个白色 space。因此,使用该信息,您现在知道要返回多少个字符。

您可以在阅读该行之前进行检查。

ifstream foo("bar.txt");

if(isdigit(foo.peek())){
    // You're getting a number
}else{
    // You're getting a string
}

peek 不会删除字符,因此您可以像未读取任何内容一样继续操作。