作业帮 > 综合 > 作业

程序看不懂怎么运行的#include main() { int i,j;char ch,*p1,*p2,*s[4]={"

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 19:45:49
程序看不懂怎么运行的
#include
main()
{ int i,j;
char ch,*p1,*p2,*s[4]={"four","hello","peak","apple"};
for(i = 0; i < 4; i++){
p1 = p2 = s[i];
ch = *(p1 + i);
while(*p1 = '\0'){
if(*p1 = ch) {
*p2 = *p1;
p2++;
}
p1++;
}
*p2 = '\0';
}
for(i = 0; i < 4; i++)
printf("%s\n",s[i]);
}
这么运行的啊,while中的看不太懂啊
给你提示一下吧,我希望能够帮助你自己理解它.
这个程序的意思是:把第1个单词中跟第1个字符相同的字符删除,把第2个单词中跟第2个字符相同的字符删除,把第3个单词中跟第3个字符相同的字符删除,把第4个单词中跟第4个字符相同的字符删除.
顺便说一下,这个程序在有的编译器环境下可能引起运行时内存错误.
#include
main()
{ int i,j;
char ch,*p1,*p2,*s[4]={"four","hello","peak","apple"};
for(i = 0; i < 4; i++){
p1 = p2 = s[i]; //p1和p2指向第i个单词的开头
ch = *(p1 + i);//ch表示第i个单词的第i个字符
while(*p1 != '\0'){ //循环让p1从这个单词的开头逐步走到这个单词的末尾
if(*p1 != ch) {//如果p1所指的字符跟ch不同,就通过p2从单词第一个位置开始放置
*p2 = *p1;
p2++;//然后让p2指向这个单词的下一个位置
}
p1++;
}
*p2 = '\0';
}
for(i = 0; i < 4; i++)
printf("%s\n",s[i]);
}
一开始p2是指向s[i]里面的第一个字符的
通过给*p2赋值就给s[ i ]这个单词里面的第一个字符赋新值了
然后p2++让p2指向这个单词的下一个字符位置
下次赋值就把第二个字符的内容改变了
如此如此