c程序char和整数分离

时间:2013-09-25 01:16:44

标签: c algorithm

我有以下程序将字符串整数转换为整数,但如果字符串包含两个字母数字,我怎样才能转换为整数?

这是我的代码段:

#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并且输入任何非数字字符。感谢

3 个答案:

答案 0 :(得分: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需要重新安置。

  6. ...

    #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;
    }
    

答案 1 :(得分:0)

而不是break,放continue

break退出循环。 continue只会让它继续下一个角色。

答案 2 :(得分: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;
}