Codeup_1962:Problem D 单词替换

问题D:单词替换

时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述

输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

输入

多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
s, a, b 最前面和最后面都没有空格。

输出

每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。

样例输入

I love Tian Qin
I
You

样例输出

You love Tian Qin

解题思路

  1. 将原字符串s逐个字符赋值给字符串c,同时从原字符串中取出要替换的字符串a大小的临时字符串temp,并与要替换的字符串a比较。
  2. 如果相同,则将替换字符串b逐个字符添加到c中,并改变循环变量i的值使得下一轮循环i指向s中a后的下一个字符。

AC代码

#include <cstdio>
#include <cstring>

int main() {
    // s为原字符串,a为要替换的字符串,b为替换字符串
    // c为输出字符串,temp为临时字符串
    char s[100], a[100], b[100], c[100], temp[100];
    while (gets(s), gets(a), gets(b)) {
        int c_i = 0;
        for (int i = 0; i < strlen(s); ++i) {
            int t = 0;
            // 从s中取a大小的字符串给temp赋值
            for (int j = i; j < strlen(a) + i; ++j) {
                temp[t++] = s[j];
            }
            temp[t] = '\0';
            // 将s中的字符逐个赋值给c,当temp与a相等时,将b中的字符逐个添加到c中
            // 将temp与a比较
            if (strcmp(temp, a) == 0) {
                // 相等则将b中字符逐个添加到c中
                for (int j = 0; j < strlen(b); ++j) {
                    c[c_i++] = b[j];
                }
                // 因为i会自动加1,故将i的值往后挪stelen(a)-1的长度
                // 则下一轮循环时i指向s中a字符串后的下一个字符
                i += strlen(a) - 1;
            } else {
                // 不相等则将s中字符添加到c中
                c[c_i++] = s[i];
            }
        }
        c[c_i] = '\0';
        printf("%s\n", c);
    }
    return 0;
}

经验总结

一开始并没有注意到要改变i的值,这样的话当要替换的字符串a的长度大于1时就会只替换1个字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值