C语言实现十进制数字字符串转整数的相关问题咨询
C语言十进制数字符串转整数实现修正
现有代码的错误点
- 变量使用错误:你声明了单个字符变量
c,但实际需要遍历的是传入的字符串参数string,代码中c[i]属于无效写法,应该用string[i]读取对应位置的字符 - 循环条件错误:
for循环的终止条件写为i < n,但n初始值为0,会导致循环直接终止不执行。正确的终止条件应该是遍历到C字符串的结束标记\0,即string[i] != '\0' - 计算逻辑错误:
n = n *10 +(c - '0')中c没有被赋值,应该替换为当前读取到的字符string[i] - 语法不规范:函数未声明返回值类型,分支语句末尾缺少必要分号
- 边界逻辑缺失:如果整段字符串全是数字,原代码循环结束后没有返回值,会产生未定义行为
符合伪代码要求的正确实现
while循环版本(更贴合伪代码逻辑)
int stoi(char *string) { int n = 0; int i = 0; // 遍历字符串直到结束 while (string[i] != '\0') { char c = string[i]; // 判断当前字符是否为数字 if (c >= '0' && c <= '9') { n = n * 10 + (c - '0'); i++; // 读取下一个字符 } else { // 遇到非数字直接返回结果 return n; } } // 字符串全为数字时遍历结束后返回结果 return n; }
for循环版本
int stoi(char *string) { int n = 0; for (int i = 0; string[i] != '\0'; i++) { if (string[i] < '0' || string[i] > '9') { return n; } n = n * 10 + (string[i] - '0'); } return n; }
注:上述实现仅适配无前缀符号的正整数字符串,若需要支持负整数,可额外增加对字符串首字符是否为'-'的判断逻辑即可
内容的提问来源于stack exchange,提问作者Kbaker12
相关产品推荐
相关产品推荐

