单词替换(字符串处理)

题目描述

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

输入描述:

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

s, a, b 最前面和最后面都没有空格.

输出描述:

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

输入

You want someone to help you
You
I

输出

I want someone to help you
#include<cstdio>  
#include<cstring>  
char s[101][105],a[105],b[105],ch;  
int main()  
{  
    int op=0,oq=0,i;  
    while(scanf("%c",&ch) && ch!='\n')  
    {  
        if(ch==' ') oq=0,op++;  
        else s[op][oq++]=ch;  
    }  
    gets(a);gets(b);  
    for( i=0;i<=op;i++)  
        if(strcmp(s[i],a)==0) strcpy(s[i],b);  
    for( i=0;i<=op;i++)  
        i?printf(" %s",s[i]):printf("%s",s[i]);  
    return 0;  
}

本题显然是在读入的时候就按照单词分类比较简单,下面这种方法也可以,但麻烦,容易搞错。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;

int main() {
    char str[100],sta[100],stb[100],tmp[100],tp[100];
    int i,j,len;
    while(gets(str)) {
        gets(sta);
        gets(stb);
        len=strlen(str);
        int lenb=strlen(stb);
        int start=0,s=0,t=0;
        for(i=0; i<len; i++) {
            if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') {
                tp[t++]=str[i];
            } else {
                tp[t++]='\0';t=0;
                if(strcmp(tp,sta)==0) { 
                    for(j=0; j<lenb; j++) 
                        tmp[s++]=stb[j];
                        tmp[s++]=str[i];
                } else {
                    for(j=start; j<=i; j++)
                        tmp[s++]=str[j];
                }
				start=i+1;
            }
        }
		if(str[len-1]>='a'&&str[len-1]<='z'||str[len-1]>='A'&&str[len-1]<='Z')
		{
			tp[t++]='\0';
			if(strcmp(tp,sta)==0) {
				for(j=0; j<lenb; j++) 
					tmp[s++]=stb[j];
					tmp[s++]=str[i];
			} else {
				for(j=start; j<=i-1; j++)
					tmp[s++]=str[j];
			}
		}
        tmp[s++]='\0';
        puts(tmp);
    }
    return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值