0

嗨,我有以下代码将字符串整数转换为整数,这些是代码:

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

int main(){

    printf("%d\n", str_to_int("456xy"));
    printf("%d\n", str_to_int("32"));
    printf("%d\n", str_to_int("-5"));
    return 0;
}

但是有些printf("%d\n", str_to_int("-5"));如何返回 5 而不是 -5,我在哪里错了?谢谢

4

3 回答 3

2

在您的转换函数中,您跳过了-字符,因为它不在您的测试范围内:

      if (c < '0' || c > '9')
        continue;

要修复它,您需要测试-字符,并在完成转换值后否定该值。

      if (c < '0' || c > '9') {
        if (c == '-' && no_other_digits_processed_yet) is_neg = true;
        continue;
      }
      //...

   if (is_neg) output = -output;
   return output;
于 2013-09-30T01:49:00.013 回答
2

if (c < '0' || c > '9') continue;是导致此问题的原因。

当变量 c 为“-”时,您只需跳过它。因此,您的结果中没有负号。

请在你的整个逻辑之前测试这个数字是否为负(有'-')。

于 2013-09-30T01:53:25.917 回答
2

您似乎根本没有在代码中考虑“-”。

您应该插入某种钩子来检测它是否为负值:

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

int main(){

    printf("%d\n", str_to_int("456xy"));
    printf("%d\n", str_to_int("32"));
    printf("%d\n", str_to_int("-5"));
    return 0;
}
于 2013-09-30T01:54:17.603 回答