解析字符串中的名称和数字。将数字放入向量

时间:2019-04-02 02:36:42

标签: c++ parsing vector

给出以下格式:

保罗34 56 72 89 92

我想读取名称并将数字放入/解析为int矢量标记。 上面格式中的所有内容都由空格分隔。

这是我尝试解决的问题。有一个错字...排名实际上是分数

StudentEntry:: StudentEntry(string line) {
    int temp = line.find(' '); // end of the name
    name = line.substr(0, temp); 
    string numbers = line.substr(temp+1);
    for (int i=0; i<rank.size(); i++) {
        rank.push_back(i);
        cout << "RANK: " << rank[i] <<endl;
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个容易尝试的解决方案。如果要获得更高的性能/灵活性,则需要做更多的研究。
如您所述,此解决方案要求输入字符串中的组件之间用空格隔开,以便能够产生正确的结果。

它使用std::istringstream的方式与std::cin一样。您为其提供输入字符串,并继续从中读取空格分隔的组件。

#include <vector>
#include <string>
#include <sstream>


std::istringstream iss{ line };        // initialize with the input string

std::string name;
iss >> name;                           // extract the first component as a string

std::vector<int> marks;
for (int num = 0; iss >> num;)         // extract rest of the components as int
    marks.push_back(num);              // and store them in a vector

请记住,名称不能包含空格。
例如,此解决方案不适用于以下输入:Paul Walker 34 56 72 89 92
为了能够使用包含空格的名称来解析字符串,您将不得不更深入地研究并做更复杂的事情。