从C ++中的字符串中提取数字

时间:2018-05-16 14:48:31

标签: c++ stringtokenizer

假设我有以下char数组:

char *word="R12_X8_10";

数字位数不固定,但相对于非数字字符的位置是固定的。如何在没有提升的情况下提取数字?我应该通过分割单词来获得{“12”,“8”,“10”}。

这应该是一项简单的任务,因为我已经在Java中做了很多次,但是在C ++中它让我的大脑负担沉重。

2 个答案:

答案 0 :(得分:3)

C ++流方式是获取或简单地忽略标记字符。例如,要忽略它们,您可以使用:

const char *word = "R12_X8_10";
int i, j, k;
std::stringstream ss(word);

ss.ignore(1) >> i;
ss.ignore(2) >> j;
ss.ignore(1) >> k;

甚至(如果不是更易读,则更紧凑):

((ss.ignore(1) >> i).ignore(2) >> j).ignore(1) >> k;

(不相关,但请注意const的{​​{1}},因为不应将字符串文本分配给非常量指针。

答案 1 :(得分:2)

你可以试试这个。

int a,b,c;
char *word="R12_X8_10";
    sscanf(word,"R%d_X%d_%d",&a,&b,&c);

我知道这是一个c ++系统,但我也知道如果包含stdio.h,scanf和sscanf可以使用c ++编译器。

我希望这会有所帮助。