std::stringstream convertor("Tom Scott 25");
std::string name;
int age;
convertor >> name >> age;
if(convertor.fail())
{
// it fails of course
}
我想将两个或多个单词提取到一个字符串变量中.到目前为止,我已经读过,似乎不可能.如果是这样,还应该怎么做?我想让姓名在数字(年龄)之前得到所有字符.
使用sscanf使我感到最舒服,但显然不能.
我需要的是例如能够提取年龄之前所有单词的能力.
解决方法:
到目前为止,发布的大多数解决方案实际上都不符合规范-直到年龄的所有数据都被视为名称.例如,它们将以“ Richard Van De Rothstyne”之类的名称失败.
正如OP所指出的,使用scanf可以执行以下操作:scanf(“%[^ 0-9]%d”,name和& age);,这样就可以了.假设这是面向行的输入,那么我还是倾向于这样做:
std::string temp;
std::getline(infile, temp);
// technically "[^0-9]" isn't required to work right...
sscanf(temp.c_str(), "%[^0123456789] %d", name, &age);
不幸的是,iostream不能提供类似于scanset转换的直接模拟-getline可以读取分隔符,但您只能指定一个字符作为分隔符.如果您真的不能使用scanf和company,那么下一站将是手工编码(年龄的起点是temp.find_first_of(“ 0123456789”);),或者使用RE包(如果编译器提供,则为TR1)它,否则可能是Boost).