liuyifeng_neo 2023-11-27 01:29 采纳率: 0%
浏览 23

C语言字符串替换代码设计相关问题

C语言设计:
【问题描述】将一段英文文章中字符串用给定的字符串替换。
【输入形式】输入包括多行,每一行为一段英文文章(长度不超过80)。以后每行包括2个字符串(长度不超过20),之间由空格分隔,第一个串为原串,第二个串为替换串,当遇到0 0两个串时表示输入结束,并且此行不需处理。注意:本题需要考虑原串和替换串的长度不同的三种情况。情况1:原串的长度大于替换串,如原串为are ,替换串为is。情况2:原串的长度等于替换串,如原串为h ,替换串为H。情况3:原串的长度小替换串,如原串为yes ,替换串为your。
【输出形式】输出替换后的文章。
【样例输入】hello how are yes.
h H
es ou
0 0
【样例输出】Hello How are you.
要求用C语言来实现功能

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-27 04:08
    关注

    【以下回答由 GPT 生成】

    #include <stdio.h>
    #include <string.h>
    
    void replaceString(char *article, char *original, char *replacement) {
        char *found = strstr(article, original); // Find the first occurrence of original in article
    
        while(found) {
            int originalLength = strlen(original);
            int replacementLength = strlen(replacement);
            int articleLength = strlen(article);
            int newArticleLength = articleLength - originalLength + replacementLength;
    
            if (originalLength > replacementLength) {
                // Shift the characters to make room for the replacement string
                for (int i = found - article + originalLength; i <= articleLength; i++) {
                    article[i + replacementLength - originalLength] = article[i];
                }
            } else if (originalLength < replacementLength) {
                // Shift the characters to make room for the replacement string
                for (int i = articleLength; i >= found - article + originalLength; i--) {
                    article[i + replacementLength - originalLength] = article[i];
                }
            }
    
            // Copy the replacement string to the new location
            strncpy(found, replacement, replacementLength);
    
            // Find the next occurrence of the original string
            found = strstr(found + replacementLength, original);
        }
    }
    
    int main() {
        char article[10000];
        char original[21];
        char replacement[21];
    
        fgets(article, sizeof(article), stdin);
    
        while(article[0] != '0' && article[2] != '0') {
            sscanf(article, "%s %s", original, replacement);
            replaceString(article, original, replacement);
            printf("%s", article);
            fgets(article, sizeof(article), stdin);
        }
    
        return 0;
    }
    

    注意:此程序假设每个文章段落之间没有空行,且每个段落末尾没有标点符号。如果文章中有空行或者标点符号,则需要进行相应的处理。



    【相关推荐】


    • 你可以看下这个问题的回答https://ask.csdn.net/questions/758443
    • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆里,每个节点的值都大于其左右两个孩子节点的值。这就是最大堆。反之就是最小堆。拿最大堆举例子,每次堆顶的元素值,不就是当前数列的最大吗?这不就成选择排序里的简单排序了吗?找完之后,将他和完全二叉树里最后一个结点的值进行交换,然后做一个自顶向下的自我调整,将他再次调整成一个完全二叉堆。第二次取最大的树,这时我们需要将上一次找到的结点屏蔽掉,不然会陷入一个死循环。无数次找完之后,再按层序的思想将二叉树里的数据遍历到一个数组当中,这时的数组为一个有序的数组。 部分也许能够解决你的问题。

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月27日

悬赏问题

  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据