下面c语言程序在vc6.0里面编译是错了,求高手指正,最好略微解析下,我看不太懂,菜鸟自学c,求指导!

2025-03-03 07:17:53
推荐回答(2个)
回答1:

0.在C++中最好用标准输入输出库iostream.h,可执行程序如下:

#include"iostream.h"

#define MAX 50

void repo(char*s,char*s1,char*s2)

{

char *p;

for(;*s;s++)

{

for(p=s1;*p&&*p!=*s;p++);

if(*p)*s=*(p-s1+s2);

}

}

main()

{

char s[MAX];/*="ABCABC";*/

char s1[MAX],s2[MAX];

cout<<"plese input the string for s:"<

cin>>s;

cout<<"plese input the string for s1:"<

cin>>s1;;

cout<<"plese input the string for s2:"<

cin>>s2;

repo(s,s1,s2);

cout<<"the string of s atter dispalce is:"<

cout<

}

1.编译错误是因为函数名在main()中调用不对

rep(s,s1,s2); 应该改成repo, 和void repo(char*s,char*s1,char*s2)保持一致

2.getch() 等待键盘字符输入,当输入任意字符时向下执行,这里功能是按任意键弹出dos环境

3.clcscr()清除dos环境下的显示

4.最后讲你最想知道的:

看每行代码的注释 我把程序改写成适合初学者的形式了 注字符串记为S,S1,S2,指针s,s1,s2

void repo(char*s,char*s1,char*s2)

{

char *p;                              //指针p作为局部变量

for(;*s;s++)                        //形参s是指针,指向scanf("%s",s);输入的字符串S的首地址,在s不指向空时一直循环,意思是遍历s的全部内容

{

for(p=s1;*p&&*p!=*s;p++)  //用p指针遍历字符串S1,意思是从S1第一个字符地址开始通过指针p顺序逐一指向每个字符,

                               ;                //空语句,什么也不做 -----如果S1字符串整串都不中不含有s指针当前对应的字符,无操作 

if(*p)                        //如果S1中含有当前s指向的S字符串中的内容

                   *s=*(p-s1+s2);     //属于S1中的字符用S2中的对应字符代替,p-s1求出S中属于S1字符串内容的位置,p-s1+s2求出S2中需替换的对应位置

}

}

比如S== ILOVEU

S1=EU

S2=OR

外层循环第一次

s->I

p->L

内层循环第一次

p->L 不等于 s->l

内层循环第二次

s1->E 不等于 s->l

外层第一次循环无替换

。。。以此类推

外层循环第五次

s->E

p->E

p->E 等于 s->E

for(p=s1;*p&&*p!=*s;p++) 不满足*p!=*s 内层循环不执行

替换s->E为

p-s1+s2->O

S 变成ILOVOU

外层循环第六次

s->U

p->E

内层循环第一次

p->E 不等于 s->U

内层循环第二次不执行因为:

p->U 等于s->U 不满足*p!=*s

执行

if(*p)                      

                   *s=*(p-s1+s2);

替换s->U为:

p-s1+s2->R

最后结果为

ILOVOU

希望这样写够详细,能帮你理解

回答2:

编译错的原因是你上面定义的处理函数叫repo 在main里调用的时候写成了rep 少了个o
clrscr()是清除当前屏幕
getch()是等待你按键,其实这个完全木有必要
至于if(*p)*s=*(p-s1+s2); 好吧,我混乱了,我也没看明白这是想干嘛