c-将多个单词提取到一个字符串变量

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).

上一篇:可以/是否可以使用Graphics MeasureString方法考虑容器的宽度和换行?


下一篇:c-使用字符数组作为字符串流缓冲区