std::stringstream convertor("Tom Scott 25");
std::string name;
int age;
convertor >> name >> age;
if(convertor.fail())
{
// it fails of course
}
我想将两个或多个单词提取到一个字符串变量中。到目前为止我读过,似乎这是不可能的。如果是的话,还有什么办法呢?我想要name
获取数字(年龄)之前的所有字符。
我觉得使用 sscanf 最舒服,但我显然不能。
我需要的是能够提取之前的所有单词age
例如。
到目前为止发布的大多数解决方案并没有真正满足规范——所有迄今为止的数据都被视为名称。例如,他们会因为“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);
不幸的是,iostreams 不提供对扫描集转换的直接模拟—— getline 可以读取到一个分隔符,但你只能指定一个字符作为分隔符。如果你真的不能使用 scanf 和 company,下一站将是手动编码(时代的开始将是temp.find_first_of("0123456789");
)或使用 RE 包(TR1,如果你的编译器提供它,否则可能Boost).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)