假设用户输入
Sarah Freshman Computer Science Major
John Sophomore Math Major
我想知道如何将这些多个输入存储到列表中?
Name = [Sarah, John]
Year = [Freshman, Sophomore]
Major = [Computer Science Major, Math Major]
我能够将前两个(Sarah / Freshman& John /二年级学生)存入一个列表,但后一部分很难,因为主要部分被分隔成空格。
- 编辑:示例代码 -
我是C ++的新手,正在尝试创建一个询问用户个人问题的程序。
std::vector<std::string> name, year, major;
std::cout << "Hello, what is your Name Year Major? "; //asks user first
std::cin << name;
std::cin << age;
std::cin << major;
int n;
std::cout << "How many students will you input? "; //enter other students info
std::cin << n;
for (int a=0;a<n;a++){
std::cout << "Please enter Name Age Major for student #" << a << ": ";
std::string a, b, c;
std::cin >> a;
std::cin >> b;
std::cin >> c; //this part throws me off
name.push_back(a);
age.push_back(b);
major.push_back(c);
}
答案 0 :(得分:1)
由于其他人已经提到如何通过更改您的输入来执行此操作,您可以在不更改输入的情况下执行此操作的方法是检查您正在阅读的单词是否是专业的第一个单词(IE“计算机”“数学”等)如果你看到它,请使用getline到行尾。如果您的输入与此类似,那么检查一个单词是否为其中一个年级可能会更好,因为您不需要进行任何追加,并且要检查的单词列表要小得多。
或者,如果你知道表格总是“名字”,“班级年”,“主要”,你可以在阅读第二个单词后简单地开始获取。
答案 1 :(得分:0)
建议1:
使用getline()
并在每个单词后插入一个特殊字符,并告诉程序只有在遇到特殊字符时才将输入标记为下一个输入。在你的情况下更容易 - 只要程序遇到单词“Major”,它就会转到下一个输入。
建议2:
输入为Computer_Science_Major,然后将_更改为程序中的空格。
答案 2 :(得分:0)
使用读取然后解析策略:
vector<string> name;
vector<string> year;
vector<string> major;
string line;
while(getline(cin, line)) // 1. reading...
{
if (line == "0") // enter 0 to finish input
break;
// 2. parsing...
int first = line.find(" "); // position of the first space
int second = line.find(" ", first+1); // position of the second space
name.push_back(line.substr(0, first));
year.push_back(line.substr(first+1, second-first-1));
major.push_back(line.substr(second+1));
}