输入一个以回车结束的字符串,将其中的数字字符转换为整数输出,要求定义和调用函数atoi(s)

2024-12-22 12:54:26
推荐回答(3个)
回答1:

(9)for(i=0; s[i]!='\0' ;i++)的意思是从前往后,只要字符不是空就执行下列操作,C语言的字符串都是以'\0结尾',所以s[i]!='\0'就是指字符串还没有遍历完。
if(s[i]>='0' && s[i]<='9')
sum=sum*10+(s[i]-'0');的意思就是这个字符是数字的话,sum这个数乘十加上这个字符表示的数字。s[i]-'0'可以获得这个字符表示的数字,应为ASCII码0-9就是连续的'9'-'0'=9……'1'-'0'=1;另外说一句字母也是连续编码所以我们可以用c + 'A' - 'a',c + 'a' - 'A'这样的语句来转换大小写。
while((s[i]=getchar())!='\n') i++;
s[i]='\0';
从键盘读入字符知道遇到换行符,这也是学C的时候常用的语句,不过可用gets(s)代替。
getchar是从键盘获得一个字符s[i]=getchar()等价于scanf("%c",&s[i]);

最后一样根据上面函数的实参写就是了int atoi(char *s),所以调用的时候是atoi(*s);

回答2:

#include
int atoi(char *s)
{ int i,sum=0;
for(i=0; (9) ;i++) (9)s[i]!='\0' //从第一个直到最后一个,第一个是s[0],最后一个结束字符是‘\0’
if(s[i]>='0' && s[i]<='9')
(10) ; (10)sum=sum*10+(s[i]-'0') //将数字字符转成整型数字后纳入s的数码序列,s[i]-'0'是用s[i]的ASCII码-'0'的ASCII码
return sum; //返回的是完整的整数。
}
void main()
{ int i;char s[80];
printf("Enter a string:");
while((s[i]=getchar())!='\n') i++; //如果获取的字符不是换行,读下一字符
(11) (11) s[i]='\0'; //设字符串结束标志,因为是逐个输入字符,结束标志也要人工输入。
printf("The integer:%d\n", (12) ); } (12)atoi(*s) //输出的内容

回答3:

‘\0’是字符串的结束符(不是可见字符),就是字符串的最后一个字符。
提示一下,出题有点问题,自己回去看看C语言的书(字符串格式化部分),'\0' '\n' '\r' 分别代表什么意思。