char str1[]="classic ",*ps1=str1,str3[80],*ps3=str3;
char str2[]="good ",*ps2=str2;
for(ps=str;strncmp(ps,ps2,strlen(ps2));ps++); //在 str 中找 good 并将 ps 指向’g’
strcpy(ps3,ps+strlen(ps2)); //将 good 后面的所有字符复制到 str3 中
strcpy(ps,ps1); //把 classic 复制到 good 的位置上
strcat(ps,ps3); //把刚才复制到 str3 中字符接到 classic 的后面
puts(str);
}
下面是全部替换的代码,其中查找换成用 char * strstr(char *,char *)函数,这样写就
只用一层循环,若还用 int strcnmp(char *,char *,int) 函数,就需要用双层 for 循环。
#include <stdio.h>
#include <string.h>
void main()
{ char str[80]="He is a good student, good member and good cadre.",*ps;
char str1[]="classic ",*ps1=str1,str3[80],*ps3=str3;
char str2[]="good ",*ps2=str2;
for(ps=str;strlen(ps)>strlen(ps2);ps++)
if(strstr(ps,ps2)) //条件成立说明找到了一个"good "
{ ps+=strstr(ps,ps2)-ps; //把 ps 指针移动到字母’g’处
strcpy(ps3,ps+strlen(ps2)); //把 good 后面的所有字符复制到 str3 中
strcpy(ps,ps1); //把 classic 复制到 good 的位置上
strcpy(ps+strlen(ps1),ps3); ////把刚才复制到 str3 中字符接到 classic 的后面
}
puts(str);
}
三、 复制
字符串的复制使用很频繁,也有很多不同的复制要求。如把一个串全部复制到另一个
空串中、把一个串中的一部分字符(子串)复制到另一个空串中、把一个串中的一部分字
符(子串)复制到另一个串中的指定位置作为它的子串、把一个串中的一部分字符(子
串)复制到本串中的另一个指定位置等。第一个要求用 strcpy(str1, str2);一句话就可以将
str2 串复制到 str1 串中。在第三种和第四种要求实现过程中都不可避免地要作第二种要求
的操作。所以下面只对第三种和第四种要求各举一个例子。对第一个要求若不准使用
strcpy(char *, char *)函数,可以自己编写一个函数实现,如后面的第三个例题。
例 3_1. 现有两个字符串,一个是”I am a student.”,另一个是”He is a good boy!”,编
程将第二个串中的”good ”,复制到第一个串中”student.”之前。代码如下:
#include <stdio.h>
#include <string.h>
void main()
{ char str[80]="I am a student.",*ps=str;
char str1[]="He is a good boy!",*ps1=str1;
char str2[50],*ps2=str2;
for(;strncmp(ps,"stu",3);ps++); //该空循环在没有找到"stu"时就向后移动指针 ps
for(;strncmp(ps1,"good",4);ps1++); //类似上一句,ps1 串!!!!!!!
strcpy(ps2,ps);