我编写用字符串计算数字的函数。 例: “t5ds5” 程序返回10 = 5 + 5。 我运行程序时遇到错误。 这里的代码!
int SumStr(char *str)
{
int i;
int temp = 0;
for(i=0;i<strlen(str);i++)
{
if(*str >= 48 && *str <= 57)
{
temp +=*str;
}
}
printf("%d", temp);
return 0;
}
答案 0 :(得分:2)
您没有将指针移动到字符串,因此您只会检查第一个值而不会检查任何其他值。您还需要从ascii值向下移动到整数值。它应该是这样的:
if ( str[i] >= 48 && str[i] <= 57 ) {
temp += str[i] - '0';
}
答案 1 :(得分:2)
试试这个:
int SumStr(char *str)
{
int temp = 0;
while(*str)
{
if((*str >= '0') && (*str <= '9'))
temp += *str - '0';
str++;
}
printf("%d", temp);
return 0;
}
虽然这似乎更正常:
int SumStr(char *str)
{
int result = 0;
while(*str)
{
if((*str >= '0') && (*str <= '9'))
temp += *str - '0';
str++;
}
return result;
}
使用SumStr("t5ds5")
调用函数会得到10的预期结果。
您的代码没有推进str
,因此您每次循环检查相同的字符。它每次绕循环调用strlen()
,这使算法O(n ^ 2)不理想。你可以按照上面的代码一次走弦。
至于为什么您的代码产生了访问冲突,这必须是由于您未显示的代码部分所致。我们只能想象str
必须指向无效的内存地址或不是以空值终止。