> name >> age; -6ren">
gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:38:11 26 4
gpt4 key购买 nike

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

关于c++ - 提取多个单词到一个字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2119080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com