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语言来实现功能
C语言字符串替换代码设计相关问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
关注 【以下回答由 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语言实现八大排序算法详解及其性能之间的中的 这里需要对堆有一定的了解,堆就是一个比较特殊的完全二叉树,在最大堆里,每个节点的值都大于其左右两个孩子节点的值。这就是最大堆。反之就是最小堆。拿最大堆举例子,每次堆顶的元素值,不就是当前数列的最大吗?这不就成选择排序里的简单排序了吗?找完之后,将他和完全二叉树里最后一个结点的值进行交换,然后做一个自顶向下的自我调整,将他再次调整成一个完全二叉堆。第二次取最大的树,这时我们需要将上一次找到的结点屏蔽掉,不然会陷入一个死循环。无数次找完之后,再按层序的思想将二叉树里的数据遍历到一个数组当中,这时的数组为一个有序的数组。 部分也许能够解决你的问题。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥15 远程安装一下vasp
- ¥15 自己做的代码上传图片时,报错
- ¥15 Lingo线性规划模型怎么搭建
- ¥15 关于#python#的问题,请各位专家解答!区间型正向化
- ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
- ¥50 comsol温度场仿真无法模拟微米级激光光斑
- ¥15 上传图片时提交的存储类型
- ¥15 VB.NET如何绘制倾斜的椭圆
- ¥15 arbotix没有/cmd_vel话题
- ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据