说明
对输入的一句子实现查找且置换的功能(找到某个子串并换成另一子串)。
比如:将“abcf abdabc”中的“abc”,替换为“AA”,则替换结果为“AAf abdAA”,而将“abcf abdabc”中的“abc”替换为“abcabc”,则替换结果为“abcabcf abdabcabc”。本题查找子串时注意,大小写完全一致,才能作为子串,比如:在“Abcf abd Abc”中,如果找字符串“abc”是不存在的。
输入格式
第一行为原来的字符串 第二行为要查找的子串 第三行为要替换成的子串。
输出格式
只有一行,为替换好的字符串
样例
输入数据 1
abcf abdabc
abc
AA
Copy
输出数据 1
AAf abdAA
思路:
在C语言中,可以使用字符串函数strstr()和strcpy()来实现将字符串的一段替换为另一个字符串的操作。具体步骤如下:
使用strstr()函数在原字符串中查找需要替换的子串的位置。
如果找到了子串,则使用strcpy()函数将替换的字符串复制到原字符串中对应的位置。
如果需要替换的子串出现多次,则需要循环执行上述步骤,直到所有的子串都被替换为止.
strstr函数:
它的函数原型为:
char *strstr(const char *str1, const char *str2);
其中,str1是要被查找的字符串,str2是要查找的字符串。函数返回值是指向第一次出现str2的位置的指针,如果没有找到,则返回NULL。
找到子串后,将新的字符串覆盖到原字符串的相应的位置,代码为
//a为原字符串,b为子字符串,c为新字符串
char temp[1000];
strcpy(temp,a);//将a复制给temp,后面有大用
char *pos=strstr(a,b);//找到位置,因为返回指针,用指针接受。
index=pos-a;
strcpy(a+index,c);
此时将c直接覆盖在需要更换的位置,但是后面不要改的也换了,所以需要还原不需要更换的,此时用上之前已经复制好的temp[],strcpy(a+strlen(c)+index,temp+index+strlen(b)).
到现在就轻松完成了一个位置的替换,需要全部替换的话写一个while循环就好了,全部代码如下
#include <stdio.h>
#include <string.h>
void replace(char a[], char b[], char c[]) {
char *pos = strstr(a, b);
while (pos != NULL) {
char temp[1000];
strcpy(temp, a);
int index = pos - a;
strcpy(a + index, c);
strcpy(a + index + strlen(c), temp + index + strlen(b));
pos = strstr(a + index + strlen(c), b); // 在剩余部分中查找是否还有子字符串需要替换
}
}
int main(){
char a[1000],b[0100],c[1000];
int i,j;
scanf("%[^\n]%*c",a);
scanf("%[^\n]%*c",b);
scanf("%[^\n]%*c",c);
replace(a,b,c);
printf("%s",a);
}
这样就轻松完成了字符串的替换啦。