C ++返回负字符串

时间:2013-09-30 01:43:37

标签: c++ string algorithm integer

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

#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,我在哪里错了?感谢

3 个答案:

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

答案 1 :(得分:2)

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

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

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

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