读字符串直到行尾? 有没有办法读取连续的单词,用空格分隔为字符串,直到C++中找到结束行?准确地说,我正在研究一个算法问题,输入如下: some_word1 some_word2 some_word3 (...) some_wordn other_data

读字符串直到行尾? 有没有办法读取连续的单词,用空格分隔为字符串,直到C++中找到结束行?准确地说,我正在研究一个算法问题,输入如下: some_word1 some_word2 some_word3 (...) some_wordn other_data,c++,C++,诀窍是我不知道第一行有多少个单词,只是我应该把它们作为单独的单词来读,以便进一步处理。我知道我可以使用getline(),但在那之后,当出现空格时,我必须一个字符一个字符地将每个单词写入一个新字符串。并不是说要做很多工作,我只是想知道是否有更好的方法来完成这项工作。我建议将整行作为字符串阅读,并将字符串拆分为字符串向量。 拆分字符串可以从这个问题中找到 stringlinestr; cin>>linestr; 字符串buf;//有一个缓冲字符串 stringstream ss(linestr);

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

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

stringlinestr;
cin>>linestr;
字符串buf;//有一个缓冲字符串
stringstream ss(linestr);//将字符串插入到流中
向量标记;//创建向量来保存我们的文字
而(ss>>buf)
代币。推回(buf);

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

stringlinestr;
cin>>linestr;
字符串buf;//有一个缓冲字符串
stringstream ss(linestr);//将字符串插入到流中
向量标记;//创建向量来保存我们的文字
而(ss>>buf)
代币。推回(buf);

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

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

为什么在使用
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";
    }
}
您可以看到空间未被保存


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


  • 您可以使用
    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";
        }
    }
    
    您可以看到空间未被保存


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


  • 既然这个问题是重复的,为什么要回答而不投票结束呢?哦,我认为我们应该回答这个问题,等待一个问题被接受,然后投票给duplicate@jpw。我猜我错了!我应该删除答案吗?不,不用麻烦了。反正现在也不会关门的。好吧,我以后会考虑的。我也会投票赞成一份副本。谢谢@jpwAnd因为这个问题是重复的,为什么要回答而不投票结束呢?哦,我想我们应该回答这个问题,等待一个问题被接受,然后投票给重复的@jpw。我猜我错了!我应该删除答案吗?不,不用麻烦了。反正现在也不会关门的。好吧,我以后会考虑的。我也会投票赞成一份副本。谢谢@jpw