2

Say if I have a string like this

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

I want to take out the 1 and 2 and convert them into ints. How can I go about doing this?

4

4 回答 4

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

当你做sscanf()我理解的格式%d是十进制 int 但你为什么有%%r

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

还有其他方法可以指定转换,例如%*[^0-9]%d%*[^0-9]%d; 使用分配抑制(*)和扫描集([^0-9],任何不是数字的东西)。此信息应可从sscanf().

于 2012-10-23T18:00:30.093 回答
2

你可以sscanf()用来得到你的结果

于 2012-10-23T17:55:00.673 回答
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
于 2012-10-23T19:56:24.480 回答
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[]. 
于 2012-10-23T20:07:10.660 回答