返回到输入文件 的某一行的开头,C++

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

本文关键字:一行 开头 C++ 输入 文件 返回      更新时间:2023-10-16

我在C++中使用 fstream 有问题。如果我打开一个文件,例如 test.txt,我想读取每一行,检查我获取的第一个值是否不是字符串。如果它不是字符串,则线条由数值组成。如果我检查第一个,我丢失了我需要的第一个值。如果我想回到行首,我该怎么做? 我已经尝试过seekg(*,ios::cur)但我不知道我必须返回多少位置才能回到行的起点。谢谢

您要做的是将行读入字符串,然后可以使用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
}
如果您

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

此外,我建议检查字符串是否为空,甚至可以在之前修剪它以确保您没有空行或检查行字符串的大小,您不会尝试剪切不存在的内容。

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

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

text.size() 将为您提供第一个单词的长度,因为>>运算符最多只能读取第一个空格。因此,使用该信息,您现在知道要返回多少个字符。

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

ifstream foo("bar.txt");
if(isdigit(foo.peek())){
    // You're getting a number
}else{
    // You're getting a string
}

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