单词替换

22 篇文章 0 订阅
7 篇文章 0 订阅

单词替换


#include <stdio.h>
#include <string>

using namespace std;

int main(int argc, const char * argv[]) {

    char str[101];
    while (gets(str)!=NULL) {  //此处不能使用scanf,因为scanf当遇到空格就输入结束。具体看王道最后一张
        char before[101];
        char after[101];
        scanf("%s%s", before, after);

        string s = str;
        string a = before;
        string b = after;
        int len_a = a.length();
        if (len_a==0) {
            return 0;
        }
        int len_b = b.length();
        int t = s.find(a, 0);  //从位置字符串的0位置开始寻找a字符串
        while (t!=string::npos) {
            if ((s[t-1]==' '&&s[t+len_a]==' ')||t==0||t==s.length()-len_a) {  //注意只有找到的位置处是单词才行,也就是除了第一个单词和最后一个单词外其余的前后都必须为空格
                s.erase(t, len_a);   //注意string的用法:删除t位置后面len_a个字符
                s.insert(t, b);      //在t位置之前插入字符串b
                t = t+len_b;         //该处为了防止被替换的单词和原单词一致,而导致死循环
                t = s.find(a, t);    //在字符串s的t位置开始往后寻找a字符串
            }
            else{
                t = t+len_a;        //当找到a字符串时,若不是一个单词,则跳过这个字符串
                t = s.find(a, t);
            }
        }
        printf("%s\n", s.c_str());    //要用到scanf输出string时,需要使用c_str();
        getchar();  //注意:用gets循环输入时,循环最后一定要写getchar(),不然在第二次输入时会出错
    }

    return 0;
}

其他一个很妙的方法:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char word[110][110],find[110],to[110];  
    int i,j;

    while(scanf("%s",word[0])!=EOF)
    {
        i=1;
        while(getchar()!='\n')
            scanf("%s",word[i++]);   //由于scanf输入时,遇到空格就停止了,所以使用二维数组word[][],把一个一个单词存入word。妙。。。。

        scanf("%s",find);
        scanf("%s",to);

        for(j=0;j<i-1;j++)
        {
            if(strcmp(word[j],find)==0)  //每个单词逐一和待替换的单词对比
                printf("%s ",to);
            else
                printf("%s ",word[j]);
        }

        if(strcmp(word[j],find)==0)
                printf("%s\n",to);
        else
                printf("%s\n",word[j]);

    }
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值