从输入中读取整数,然后将行的其余部分作为单个字符串读取
Reading integer then rest of the line as a single string from input
假设我正在尝试阅读以下内容 input.txt
6 Jonathan Kim Jr
2 Suzie McDonalds
4 Patty
... 我想将每一行的第一个整数和其余字符串存储为字符串变量。这是我试过的:
int num;
string name1, name2, name3;
while ( ins >> num >> name1 >> name2 >> name3 )
{
// do things
}
不幸的是,这行不通,因为第 2 行和第 3 行只有 2 个和 1 个字符串分别按顺序排列,因此循环将在第一个循环处终止。
有没有办法将整数后的其余字符串存储在单个变量中,包括空格?例如,字符串变量 name
将包含:
"Jonathan Kim Jr" // first loop
"Suzie M" // second loop
"Patty" // third loop
我也考虑过使用 getline 来实现这一点,但这需要我将整数与字符串隔离开来,我希望有更好的方法来做到这一点。也许使用向量?
默认情况下,>> 运算符在 space 上拆分,因此您可以使用它将整数拉入变量。然后您可以使用 getline 获取该行的其余部分,并将其存储到变量中。
示例(如果您正在阅读 std::cin):
int num;
std::string name;
std::cin >> num;
std::getline(std::cin, name);
为什么不使用正则表达式(https://en.wikipedia.org/wiki/Regular_expression) to parse (https://en.cppreference.com/w/cpp/regex)输入?我认为一个表达式类似于 2 个子表达式:
'^([0-1]+)\s([A-Za-z0-9_-/s]+)'
假设我正在尝试阅读以下内容 input.txt
6 Jonathan Kim Jr
2 Suzie McDonalds
4 Patty
... 我想将每一行的第一个整数和其余字符串存储为字符串变量。这是我试过的:
int num;
string name1, name2, name3;
while ( ins >> num >> name1 >> name2 >> name3 )
{
// do things
}
不幸的是,这行不通,因为第 2 行和第 3 行只有 2 个和 1 个字符串分别按顺序排列,因此循环将在第一个循环处终止。
有没有办法将整数后的其余字符串存储在单个变量中,包括空格?例如,字符串变量 name
将包含:
"Jonathan Kim Jr" // first loop
"Suzie M" // second loop
"Patty" // third loop
我也考虑过使用 getline 来实现这一点,但这需要我将整数与字符串隔离开来,我希望有更好的方法来做到这一点。也许使用向量?
默认情况下,>> 运算符在 space 上拆分,因此您可以使用它将整数拉入变量。然后您可以使用 getline 获取该行的其余部分,并将其存储到变量中。
示例(如果您正在阅读 std::cin):
int num;
std::string name;
std::cin >> num;
std::getline(std::cin, name);
为什么不使用正则表达式(https://en.wikipedia.org/wiki/Regular_expression) to parse (https://en.cppreference.com/w/cpp/regex)输入?我认为一个表达式类似于 2 个子表达式:
'^([0-1]+)\s([A-Za-z0-9_-/s]+)'