2301_77606356 2023-04-19 15:35 采纳率: 100%
浏览 192
已结题

搜索字符串并替换(重复使用)

依次读入3个非空字符串:字符串1、字符串2、字符串3,输入的3个字符串最大长度不超过100,且字符串3的长度至少比字符串2的长度少1。
然后在字符串1中搜索是否有子串与字符串2相等,如果相等,则用字符串3替换字符串1中该子串部分。
重复上述搜索与替换过程,直到字符串1中不存在子串与字符串2相等。
输入格式:
输入3个用空格分隔的字符串。
输出格式:
被替换后的字符串1的内容。
输入样例1:
aabcd abc ef
输出样例1:
aefd
输入样例2:
aabcc abc b
输出样例2:
b
以上是题目
我目前只能做出样1的答案
尝试用函数来解决样2失败
想看看大家如何解决

  • 写回答

4条回答 默认 最新

  • 灬烟花易冷灬 2023-04-19 15:46
    关注
    
    #include <stdio.h>
    #include <string.h>
    int main() {
        char s1[101], s2[101], s3[101];
        scanf("%s %s %s", s1, s2, s3);
        while (strstr(s1, s2) != NULL) {  // 查找s1中是否存在子串与s2相等,使用strstr函数
            char new_s1[301] = {0};  // 申请一个新字符串替换s1
            char *start = strstr(s1, s2);  // 获取s1子串与s2相等的开始位置
            int len1 = start - s1;  // 获取子串前面的部分所占长度
            int len2 = strlen(s2);  // 获取子串所占长度
            int len3 = strlen(s3);  // 获取替换字符串所占长度
            strncpy(new_s1, s1, len1);  // 将s1子串前面的部分拼接到新字符串
            strcat(new_s1, s3);  // 将替换字符串拼接到新字符串
            strcat(new_s1, s1 + len1 + len2);  //将s1子串后面的部分拼接到新字符串
            strcpy(s1, new_s1);  // 修改s1的值,为新字符串的值
        }
        printf("%s", s1);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月19日

悬赏问题

  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算