解析getline的结果

时间:2017-03-10 02:46:19

标签: c++ c++14

我正在使用activator run 逐行读取标准输入的输入,但我有兴趣单独查看从getline收到的行的每个单词。

实现这一目标的最佳解决方案是什么?我正在考虑将字符串放入getline然后解析,但是想知道是否有更有效的解决方案,或者这是否有效。

任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果你可以使用boost库,那么一些字符串算法在这里可以用来将行标记为单词。

#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/trim.hpp>

std::vector<std::string> split(std::string value,
                               const std::string& delims) {
    std::vector<std::string> parts;
    boost::trim_if(value, boost::is_any_of(delims));
    boost::split(parts, value,
                 boost::is_any_of(delims), boost::token_compress_on);
    return parts;
}

int main(int, char**) {
    for (size_t lines = 1; !std::cin.eof(); ++lines) {
        std::string input_line;
        std::getline(std::cin, input_line);
        std::vector<std::string> words = split(input_line, " ");
        for (const std::string& word : words) {
            std::cout << "LINE " << lines << ": " << word << std::endl;
        }
    }
}

示例输出:

$ printf "test  foo   bar\n a b c \na b c" | ./a.out 
LINE 1: test
LINE 1: foo
LINE 1: bar
LINE 2: a
LINE 2: b
LINE 2: c
LINE 3: a
LINE 3: b
LINE 3: c

答案 1 :(得分:-2)

您可以使用'string.c_str()[index]'来获取字符串中的每个单词。

#include <iostream>
using namespace std;
int main(void)
{
    string sIn;

    // input 
    getline(cin,sIn);

    for (int i=0 ; i<sIn.length() ; i++ ) {
        // get one char from sIn each time
        char c = sIn.c_str()[i];

        // insert something you want to do 
        // ...

        cout << c << endl;
    }
    return 0;
}