从输入中读取整数,然后将行的其余部分作为单个字符串读取

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]+)'