取多行输入,以逗号分隔,将每行存储到字符串数组中

take multiple lines of input,split at comma, store each line into string array

本文关键字:存储 字符串 数组 输入 分隔      更新时间:2023-10-16

下面是我将使用的输入类型的示例:(来自标准输入)

Archery,M,TEAM,Archery,Lord's Cricket Ground,1. GOLD,team ITA,Italy
Archery,M,TEAM,Archery,Lord's Cricket Ground,2. SILVER,team USA,United States
Archery,M,TEAM,Archery,Lord's Cricket Ground,3. BRONZE,team KOR,South Korea
Cycling,M,IND,Road,Regent's Park,1. GOLD,Aleksander Winokurow,Kazakhstan
Cycling,M,IND,Road,Regent's Park,2. SILVER,Rigoberto Uran,Colombia
Cycling,M,IND,Road,Regent's Park,3. BRONZE,Alexander Kristoff,Norway
Fencing,F,IND,Foil,ExCeL,1. GOLD,Elisa Di Francisca,Italy
InsertionEnd

正如标题所示,我想取每一行,用逗号分隔,并将这些字符串中的每一个存储到数组(或字符串向量)中。然后我想把数组中的每一项都用作函数的参数。我知道如何读取多行和如何分割字符串,但是当我把这些东西放在一起时,它就不适合我了。

我的思路:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    string line;
    stringstream ss(line);
while (line != "InsertionEnd") {
    vector<string> array;
    getline(ss, line, ',');
    array.push_back(line);
    addItem(array[0],array[1],array[2],array[3],array[4],array[5],array[6],array[7])
    }
}

所以在我得到我的数组之后,我想使用一个addItem函数,我做的只是创建一个运动员结构(需要8个参数)。像这样:

myTable.addItem("Archery","M","TEAM","Archery","Lord's Cricket Ground","1. GOLD","team ITA","Italy");

我讲对了吗?或者这完全是错的??谢谢。

注意:我已经测试了addItem函数,当你自己输入参数时,它可以工作。

你的想法是正确的;但是你在代码中犯了一些错误:
- stringstream ss(line); -你在一个空字符串上初始化stringstream;您需要首先输入该行,然后将其插入stringstream。
- array.push_back(line); -你直接把字符串line推到结果向量上;你需要首先把它分解成它的组成词。


下面的代码实现了您的问题的工作解决方案:

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    string line;
    vector<vector<string>> array;
    while ( true )
    {
        getline ( cin, line );
        if ( line == "InsertionEnd" )
        {
            break;
        }
        stringstream ss ( line );
        string word;
        vector<string> vector_line;
        while ( getline ( ss, word, ',' ) )
        {
            vector_line.push_back ( word );
        }
        array.push_back ( vector_line );
    }
}

这是一个正确循环输入的解决方案,分割每行并用提取的令牌调用addItem:

string line;
while (getline(cin, line)) { // for each line...
    if (line == "InsertionEnd") break;
    // split line into a vector
    vector<string> array;
    stringstream ss(line);
    string token;
    while (getline(ss, token, ',')) { // for each token...
        array.push_back(token);
    }
    // use the vector
    addItem(array[0],array[1],array[2],array[3],array[4],array[5],array[6],array[7]);
}