给定程序的功能是:判断字符ch是否与串str中的某个字符相同,若相同什么也不做,若不同则插在串的最后?

#include <stdio.h>
#include <string.h>
void fun (char *str,char ch)
{
while (*str &&*str !=ch) str++;
if(*str!=ch)
{ str[0]=ch;
str[1]=0;
}
}
void main()
{char s[81],c;
system("CLS");
printf("\nPlease enter a string : ");
gets(s);
printf("\n Please enter the character to search : ");
c=getchar();
fun(s,c);
printf("\nThe result is %s\n",s);
}

这个 while (*str &&*str !=ch) str++;
if(*str!=ch)
{ str[0]=ch;
str[1]=0;
怎么理解啊?

/*str即为*str != NULL,用于判断指针是否到了字符串尾,
*str !=ch用于判断字符串中是否有与用户输入的单个字符相同的字符,
str++;使指针移至字符串中的下一个字符*/
while (*str &&*str !=ch) str++;
/*这里有两种情况,如果出现用户输入字符与字符串中某字符相同,跳出whlie循环(即出现了*str==ch即whle循环的第二个判断条件退出),那么,因为此时*str和ch是相同的,所以进入不了if,直接回到主函数main(),在屏幕上输出原来的字符串。另外一种情况是,*str != NULL,即在字符串str中没有找到与用户输入的字符ch相同的字符,也就是whlie循 环的第一个条件退出,那么这个时候*str 与ch不同,所以进入if。注意,这个时候的指针是指向数组的最后一个字符(即字符串的结束符0)*/
if(*str!=ch)
{ str[0]=ch;//这个表达式的作用是,把用户输入的字符ch替换字符串最后一个字符0.
str[1]=0;//这个表达式的作用是,补上数组的结束字符0.

话说这个想了好一会儿啊……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-14
if(*str!=ch)
{ str[0]=ch;
str[1]=0;
}
这段代码就是判断当循环结束后如果当前位置的字符(*str)和ch字符不相等,那么将ch插入字符串的尾部,并且在插入的字符后在插入一个字符串的结束符;
你要先理解那个循环while (*str &&*str !=ch) str++;
它从字符串的头开始逐个比较字符,如果其中某个字符和ch相等,那么当循环结束时,*str一定和ch是相等的,这样自然不用插入字符;如果逐个比较都不相等那么字符串最后一个字符一定是0x00,那么*str &&*str !=ch这个表达式第一个字表达式*str一定为0x00,条件为假,循环结束。这时再看那个if判断,这时的*str和ch一定不相等,所以str[0]原来是0x00(字符串结束符),就会被ch替换(str[0]=ch重新赋值了),然后再给它后面追加一个0x00作为字符串结束符。
第2个回答  2011-02-21
楼上两位都是正确的。
当我看到这两句时(str[0]=ch; str[1]=0;),我也以为是在改变输入字符串的0、1位。后面发现是str指针当前位(即原来NULL位),,str[1]是它的下一位。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网