#include <assert.h>
#include <stddef.h>
#include <string.h>
int StringToInteger(const char *str) {
int num = 0;
int sign = 1;
assert(str != NULL); //assert that str different from NULL
if (*str == '+' || *str == '-') {
sign = (*str == '-') ? -1 : 1;
str++;
return sign; // if sign start with character
}
while (*str != '\0') {
if (*str >= '0' && *str <= '9') {
num = num * 10 + (*str - '0');
} else {
return 0;
}
str++;
}
return 0;
}
我尝试编写一个不同版本的代码,而不使用常规转换函数,但没有成功。
3条答案
按热度按时间4c8rllxm1#
问题:
删除该行,然后在代码中按
sign
调整num
。提示:也运行拼写检查.
int
溢出**StringToInteger("-2147483648")
一样处理INT_MIN
文本4xrmg8kj2#
该函数有许多没有意义的return语句,例如
并且你的函数返回符号或0,实际上它没有考虑字符串中存储值的符号。
还要考虑字符串可以包含前导或尾随白色字符。
您可以使用way.as标准C函数
strtol
来实现该函数,简化的函数可以忽略存储的数字太大而无法放入int
类型的对象的情况。下面是一个演示程序,说明如何实现该功能。
程序输出为
cwtwac6a3#
将字符串转换为整数(如果有足够的数字/字母/符号,则为任意基数)以表示该基数中的数字的函数。