【入门】查找子串并替换(巨巨巨详细)

说明

对输入的一句子实现查找且置换的功能(找到某个子串并换成另一子串)。

比如:将“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);


}

这样就轻松完成了字符串的替换啦。

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值