九度[1111]-单词替换

九度[1111]-单词替换

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

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

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

样例输入
You want someone to help you
You
I

样例输出
I want someone to help you

解题思路:
字符串操作,用的STL的string
(文末链接是另一个思路,注意字符串加空格的思路比较巧妙,且最后需要cin.get()吸收回车)

AC代码-1:

#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
string input, init, rep;
vector<string> vec;

int main(){
    freopen("C:\\Users\\Administrator\\Desktop\\test.txt", "r", stdin);
    while(getline(cin, input)){
        getline(cin, init);
        getline(cin, rep);
        string::size_type idxs = 0, idxe;
        while(1){
            idxe = input.find(" ", idxs);
            if(idxe != string::npos){
                vec.push_back(input.substr(idxs, idxe-idxs));
            }
            else {
                vec.push_back(input.substr(idxs));
                if(idxe == string::npos) break;
            }
            idxs = idxe+1;
        }
        for(int i = 0; i < vec.size(); i++){
            if(vec[i] == init){
                cout<<rep;
            }
            else cout<<vec[i];
            if(i < vec.size() - 1) cout<<" ";
        }
        cout<<endl;
        vec.clear();
    }
    fclose(stdin);
    return 0;
}

AC代码-2

#include <string>
#include <iostream>
using namespace std;

int main(){
    string s, a, b;
    freopen("C:\\Users\\Administrator\\Desktop\\test.txt", "r", stdin);
    while(getline(cin, s)){
        cin>>a>>b;
        string::size_type idxs = 0, idxe = s.find(" ", idxs);
        while(idxe != string::npos){
            //cout<<"idxs: "<<idxs<<" idxe: "<<idxe<<" "<<s.substr(idxs, idxe-idxs)<<endl;
            if(s.substr(idxs, idxe-idxs) == a) s.replace(idxs, a.size(), b);
            idxs = idxe+1;
            idxe = s.find(" ", idxs);;
        }
        if(s.substr(idxs) == a) s.replace(idxs, a.size(), b);
        cout<<s<<endl;
        cin.get();
    }
    fclose(stdin);
    return 0;
}

九度题目1111:单词替换
有关连续cin输入数据(cin不丢弃回车符,>>会跳过回车符)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值