从C中的字符串中拉出两个整数

时间:2012-10-23 17:52:04

标签: c string parsing

说我是否有像这样的字符串

char foo[10] = "%r1%r2";

我想取出12并将其转换为int s。我怎么能这样做呢?

4 个答案:

答案 0 :(得分:4)

if (sscanf(foo, "%%r%d%%r%d", &i1, &i2) != 2)
    ...format error...

  

当您执行sscanf()的格式时,我理解%d是一个十进制int,但为什么你有%%r

如果您要在源字符串中查找文字%,请使用%%在格式字符串中指定(printf()中使用%%在格式字符串中,在输出中生成%; r代表自己。

还有其他方法可以指定转化,例如%*[^0-9]%d%*[^0-9]%d;使用赋值抑制(*)和扫描集([^0-9],任何不是数字的东西)。此信息应从sscanf()的手册页中获取。

答案 1 :(得分:2)

你可以使用sscanf()来获得结果

答案 2 :(得分:0)

考虑到你的字符串确实有两个'%',每个字符串后面都有一个数字。 例如:

  char foo[10] = "%123%874";

不要忘记包含stdlib库:

   #include <stdlib.h>

以下代码将123转入r1,将874转换为r2。

  for(int i = 1; ; i++)
      if(foo[i] == '%')
      {
          r2 = atoi(&foo[i + 1]); // this line will transform what is after the second '%' into an integer and save it into r2
          foo[i] = 0; // this line will make the place where the second '%' was to be the end of the string now
          break;
      }
  r1 = atoi(&foo[1]); // this line transforms whatever is after the first character ('%') into an int and save it into r1

答案 3 :(得分:0)

int array[MAXLEN];
int counter = 0; 
for(int i = 0; i < strlen(foo); i++){
   if(isdigit(foo[i]) && (counter < MAXLEN)){
        array[counter++] = (int)(foo[i]-'0');
   }
}
//integers are in array[].