1

我有以下程序将字符串整数转换为整数,但是如果字符串同时包含字母数字,我该如何转换为整数?

这是我的代码片段:

#include <stdio.h>
int convstrg(const char* str) {
  int output = 0;
  char* p = str;
  for (;;) {
    char c = *p++;
    if (c < '0' || c > '9') {
      break;
      output *= 10;
      output += c - '0';
    } else {
      output = 0;
    }
    return output;
  }
}

int main() {
  printf("%d\n", convstrg("aaa"));
  return 

0; }

当输入为“100”时,我得到 100 作为输出,但是当它包含“a201”时,我得到空结果,而是应该返回 201 并输入任何非数字字符。谢谢

4

3 回答 3

1

OP 帖子有多个问题

  1. if (c < '0' || c > '9') { break; ... }肯定有问题。

  2. char* p = str;应该是const char* p = str;保持常数。

  3. output *= 10; output += c - '0';需要位于一个if()包含数字的位置。

  4. for()循环需要终止测试

  5. return需要搬迁。

..

#include <stdio.h>
int convstrg(const char* str) {
  int output = 0;
  // char* p = str;
  const char* p = str;
  // for (;;) {
  for (;*p;) {
    char c = *p++;
    // if (c < '0' || c > '9') {
    if ((c >= '0') && (c <= '9'))  {
      // break;
      output *= 10;
      output += c - '0';
    }
    // return output;
  }
  return output;
}

int main() {
  printf("%d\n", convstrg("100"));
  printf("%d\n", convstrg("a201"));
  printf("%d\n", convstrg("20abc23"));
  return 0;
}
于 2013-09-25T02:08:21.810 回答
0

而不是break, 放continue.

break退出循环。continue只会让它移动到下一个角色。

于 2013-09-25T01:18:01.090 回答
0

您不希望return在循环和else条件中。注意边界,这应该可以解决问题

#include <stdio.h>
int convstrg(char* str) {
   int output = 0;
   char* p = str;
   int i=0;
   for(i=0;p[i]!='\0';i++) {
      char c = *p++;
      if (c < '0' || c > '9')
          continue;
      output *= 10;
      output += c - '0';
   }   
   return output;
}

int main(){
    char x[] = "1xx2";
    printf("%d\n", convstrg(x));
    return 0;
}
于 2013-09-25T01:53:56.767 回答