取多行输入,以逗号分隔,将每行存储到字符串数组中
take multiple lines of input,split at comma, store each line into string array
下面是我将使用的输入类型的示例:(来自标准输入)
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]);
}
相关文章:
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 在向量 C++14(无限制联合)的结构内的联合中创建和存储字符串
- 如何存储字符串列表
- 在向量中存储字符串存在 SEG 错误
- 指针存储字符串?
- 逐个字母存储字符串并打印
- 将字符数组转换为字符串并存储字符串?
- 当分配动态内存以存储字符串副本时,程序会中断
- 在C/C++中存储字符串、数组和指针,哪种方法更有效
- 我们如何以 7 位格式存储字符串
- C 存储字符串输入为CString
- TVItem lparam存储字符串
- C++以相反的顺序存储字符串
- 如果存储字符串的char数组小于字符串,则C++实际存储字符串
- 为什么我的 SetBookTitle 不存储字符串
- 如何在 C 中有效地存储字符串的映射
- 如何使用好友运算符存储字符串
- 如何在 C++ 中存储字符串和整数串联的变量
- 如何在 c++ 中存储字符串数组
- 存储字符串