一道C题,求解答案

来源:百度知道 编辑:UC知道 时间:2024/06/15 06:28:11
void ss(char *s,char t)
{ while(*s)
{ if(*s==t)*s=t-'a'+'A';
s++;} }
main()
{ char str1[100]="abcddfefdbd",c='d';
ss(str1,c);printf("%s\n",str1);}

输出结果是abcDDfefDbD

why???有关指针的

看ss函数里
首先while循环的条件为*s,当第一次运行时,*s == 'a',字母'a'不为0,即为真。
在看后面的s++,该句是将指针前移,移动到下一个字符,则下一次的while条件为'b',依次类推。
当指针移到*s == 'd'时,就满足了if 条件,则执行*s = t - 'a' + 'A';该语句的意思是将变量t中存放的字符的ascii值减去字母'a'的ascii值,然后再加上大写字母'A'的ascii值,其结果刚好是把小写字母转换为大写字母,(如t的值为'd',则为:100 - 97 + 65 = 68,68是大写字母'D'的Ascii值),最后将该值存储在指针s指向的位置,所以就把字符串中的所有小写'd'换成了大写'D'。

当指针移动到字符串结尾时,由于字符串是以'\0'结尾的,其值为0,则while条件为假,即退出循环!

最后还有一点,因为ss函数的第一个参数是传递的指针,所以改变其指向的值也将影响到main函数中的str1,所以最后输出的是经过ss函数改变后的字符串!

if(*s==t)*s=t-'a'+'A'; 这句的意思是发现一样的就,将其大写化

我姑且认为我解释这么多,你就可以理解了,恩

void ss(char *s,char t) //统计这个字符串有几个T。
{ while(*s)
{ if(*s==t)*s=t-'a'+'A';//这里写成t-32可能楼主就明白了。其实这里的意思就是这个。可是怕有的人不知道大小写的转换是32.所以用'a'-'A'来表示32.相当于s=t-('a'-‘A )
s++;} }
main()
{ char str1[100]="abcddfefdbd&quo