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