您好我有以下代码将字符串整数转换为整数,这些是代码:
#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,我在哪里错了?感谢
答案 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;
}