2013-09-30 3 views
0

Привет у меня есть следующий код для преобразования строки целого числа в целое число, это код:C++ возвращает отрицательную строку

#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, где я неправильно здесь? Благодаря

+1

конечно -5 возвращение, так как вы никогда не справиться с «-» Charactor. самый простой способ: перед возвратным выходом добавить if (str [0] == '-') reutrn -outout; else return output; –

+0

@ALan, как вы проверяете 'x-5' то? – billz

+0

@billz, о да, если x-5 следует рассматривать как значение nagetive, я не могу проверить. Это зависит от предела входной строки, или мы можем моделировать более сложный случай, такой как «xy - 5-6», и кажется ... Я не знаю правила ... tks catching. –

ответ

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

Это if (c < '0' || c > '9') continue;, что вызывает эту проблему.

Когда переменная c is '-', вы просто просто пропустите ее. Таким образом, в вашем результате нет отрицательного знака.

Пожалуйста, просто проверьте, является ли это число отрицательным (имеет «-») перед всей вашей логикой.

Смежные вопросы