假设我有以下char数组:
char *word="R12_X8_10";
数字位数不固定,但相对于非数字字符的位置是固定的。如何在没有提升的情况下提取数字?我应该通过分割单词来获得{“12”,“8”,“10”}。
这应该是一项简单的任务,因为我已经在Java中做了很多次,但是在C ++中它让我的大脑负担沉重。
答案 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 ++编译器。
我希望这会有所帮助。