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

这个函数作用是实现已知字符串s中,所有属于s1中的字符都用s2中的对应字符代替,看不懂的地方主要有if(*p)*s=*(p-s1+s2);clrscr();getch()... 这个函数作用是实现已知字符串s中,所有属于s1中的字符都用s2中的对应字符代替,
看不懂的地方主要有if(*p)*s=*(p-s1+s2);clrscr();getch();
#include"stdio.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];
clrscr();
puts("plese input the string for s:");
scanf("%s",s);
puts("plese input the string for s1:");
scanf("%s",s1);
puts("plese input the string for s2:");
scanf("%s",s2);
rep(s,s1,s2);
puts("the string of s atter dispalce is:");
prints("%s\n",s);
puts("\n press any key to quit...");
getch();
}
展开
 我来答
isofspps
2011-08-29
知道答主
回答量:26
采纳率:0%
帮助的人:23.9万
展开全部

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:"<<endl;

cin>>s;

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

cin>>s1;;

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

cin>>s2;

repo(s,s1,s2);

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

cout<<s<<endl;

}

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

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

18...1@qq.com
2011-08-28 · 超过51用户采纳过TA的回答
知道答主
回答量:184
采纳率:0%
帮助的人:168万
展开全部
编译错的原因是你上面定义的处理函数叫repo 在main里调用的时候写成了rep 少了个o
clrscr()是清除当前屏幕
getch()是等待你按键,其实这个完全木有必要
至于if(*p)*s=*(p-s1+s2); 好吧,我混乱了,我也没看明白这是想干嘛
追问
还是有错误啊
e:\c语言\cpp69.cpp(16) : error C2065: 'clrscr' : undeclared identifier
e:\c语言\cpp69.cpp(25) : error C2065: 'prints' : undeclared identifier
e:\c语言\cpp69.cpp(27) : error C2065: 'getch' : undeclared identifier
e:\c语言\cpp69.cpp(28) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Cpp69.obj - 3 error(s), 1 warning(s)
追答
getch和clrscr需要包含conio.h
至于prints我想你还是改成printf算了原本以为这个也是conio里的函数不过刚查了一下,似乎不是
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式