【问题标题】:C++ Easy way to ignore first word of inputC++ 忽略输入的第一个单词的简单方法
【发布时间】:2015-12-10 00:21:48
【问题描述】:

我正在编写一个程序来逐行读取文本文件,将行值存储在向量中,进行一些处理然后写回新的文本文件。这是文本文件通常的样子:

如您所见,有两列:一列用于帧编号,另一列用于时间。我想要的只是第二列(也就是时间)。文本文件中可能有数百行,甚至数千行。以前我一直在手动删除我不想这样做的帧号列。所以我的问题是:有没有一种简单的方法来编辑我当前的代码,这样当我用getline() 读取文件时,它会跳过第一个单词而只得到第二个单词?这是我用来读取文本文件的代码。谢谢

ifstream sysfile(sys_time_dir);

//Store lines in a vector
vector<string> sys_times;
string textline;

while (getline(sysfile, textline))
{
    sys_times.push_back(textline);
}

【问题讨论】:

    标签: c++ vector io getline


    【解决方案1】:

    由于每行有两个数字,因此您可以读取两个数字并忽略第一个数字。

    vector<double> sys_times;
    int first;
    double second;
    while ( sysfile >> first >> second )
    {
       sys_times.push_back(second);
    }
    

    【讨论】:

    • 感谢您的回答!你的也很好,但不幸的是我不能接受 2 个答案
    • @oodan123,一点问题都没有。
    【解决方案2】:
    std::string ignore_me;
    while (sysfile >> ignore_me, getline(sysfile, textline)) {
    ...
    

    这利用逗号操作符,读取该行的第一个单词(此处将“单词”定义为非空格字符的连续序列),但忽略结果,然后使用getline 读取其余部分行。

    请注意,对于您描述的特定数据格式,我宁愿选择 RSahu 在他们的回答中显示的内容。对于“跳过第一个单词并阅读其余部分”的问题,我的回答更笼统

    【讨论】:

    • 在这里使用逗号而不是&amp;&amp; 有什么好处吗?
    • @molbdnilo:不。除了主观上进一步澄清我不关心第一次手术的成功。此外,对于像我这样有时必须查找运算符优先级的人来说,我至少可以始终记住逗号运算符是最低优先级。
    • FWIW,如果希望阅读 textline 而不使用前导空格,可以使用 sysfile &gt;&gt; ignore_me &gt;&gt; std::ws....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多