字符串练习21_单词替换

/*
	Name: 21_单词替换
	Author: 巧若拙 
	Description:
描述
输入一个字符串,以回车结束(字符串长度<=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

算法分析:基本思路都是提取每一个单词,根据使用不同的字符串函数,有两种不同做法。
算法1:提取单词并存储每一个单词,利用字符串函数strcmp(s1, a),判断是否为需要替代的单词,注意需要单独处理最后一个单词。
算法2:利用字符串函数strstr(p, a),找到需要替代的单词,要注意区别是全单词匹配还是部分匹配,只有全单词匹配时才替代。 
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;

const int N = 201;
char s[N],a[N],b[N];
char s1[N];

void Fun1();
void Fun2();

int main() 
{
	gets(s); gets(a); gets(b);
	Fun1();
	Fun2();
		
	return 0;	
} 

void Fun1()
{
	int t=0;;
	for (int i=0; s[i]!='\0'; i++)
	{
		if (s[i] == ' ')
		{
			s1[t] = '\0'; //构造一个字符串 
			t = 0;
			if (strcmp(s1, a) == 0) //判断一个单词 
				cout << b << " ";
			else
				cout << s1 << " ";
		}
		else
		{
			s1[t++] = s[i];
		}
	}
	s1[t] = '\0'; 
	if (strcmp(s1, a) == 0) //判断最后一个单词 
		cout << b << endl;
	else
		cout << s1 << endl;
}

void Fun2()
{
	int n = strlen(a);
	char *q, *r, *p = s;
	while (*p != '\0')//遍历字符串s
	{
		q = strstr(p, a);
		if (q != NULL)
		{
			for (r=p; r<q; r++)
			{
				cout << *r;
			}
			if ((q==p || *(q-1)==' ') && (*(q+n)=='\0' || *(q+n)==' '))	//全单词匹配 
				cout << b;
			else //单词部分匹配 
				cout << a;
			p = q + n; 
		}
		else
		{
			cout << p;
			break;
		}
	} 
	cout << endl;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值