读取字符串直到行尾

Reading strings until end of line?

本文关键字:字符串 读取      更新时间:2023-10-16

有没有办法将用空格分隔的连续单词作为字符串读取,直到在C++中找到行的末尾?准确地说,我正在处理一个算法问题,输入如下:

some_word1 some_word2 some_word3 (...) some_wordn
other_data

诀窍是我不知道第一行会有多少单词,只是我应该把它们作为单独的单词来读,以便进一步处理。我知道我可以使用getline(),但在那之后,当出现空格时,我必须逐个字符地将每个单词写入一个新字符串。这并不是说工作量很大,我只是好奇是否有更好的方法。

为什么在使用getline之后必须逐个字符地工作?解析面向行的输入的通常方式是逐行读取,使用getline,然后使用std::istringstream解析该行(假设这是最合适的解析工具,就像您的案例)。所以要读取文件:

std::string line;
while ( std::getline( input, line ) ) {
    std::istringstream parse( line );
    //  ...
}

您可以使用sstream并将其与getline()组合,这是您已经知道的。

#include <iostream>
#include <sstream>
int main()
{
    std::string fl;
    std::getline(std::cin, fl); // get first line
    std::istringstream iss(fl);
    std::string word;
    while(iss >> word) {
        std::cout << "|" << word << "|n";
    }
    // now parse the other lines
    while (std::getline(std::cin, fl)) {
      std::cout << fl << "n";
    }
}

输出:

a b
|a|
|b|
a
a
g
g
t
t

您可以看到空间未被保存。


在这里你可以看到相关的答案:

  1. 用C拆分字符串++
  2. 逐字输入字符串

我建议将整行读取为字符串,并将字符串拆分为字符串向量。拆分字符串可以从这个问题中找到在C++中拆分字符串?

string linestr;
cin>>linestr;
string buf; // Have a buffer string
stringstream ss(linestr); // Insert the string into a stream
vector<string> tokens; // Create vector to hold our words
while (ss >> buf)
    tokens.push_back(buf);