实现单词替换(非word中的字符串替换,有点难度)

 

               说实话,这个题目挺难的,要综合考虑多种情况,word中的替换功能仅仅是实现字符串的替换,而这里是单词的置换. 提交后,一次成功,相当开心啊!, 程序如下:

 

#include<iostream>
#define FLAG1 1
#define FLAG2 2
#define FLAG3 3
#define FLAG4 4

using namespace std;


bool isSeperator(char c)
{
	if(' ' == c || ',' == c || '.' == c)
		return true;

	if('?' == c || '!' == c || ';' == c)
		return true;

	return false;
}

bool isyou(char x, char y, char z)
{
	if('y' == x && 'o' == y && 'u' == z)
		return true;

	return false;
}

bool isYou(char x, char y, char z)
{
	if('Y' == x && 'o' == y && 'u' == z)
		return true;

	return false;
}

bool iswe(char x, char y)
{
	if('w' == x && 'e' == y)
		return true;

	return false;
}

bool isWe(char x, char y)
{
	if('W' == x && 'e' == y)
		return true;

	return false;
}

int main()
{
	char s[1025];
	char finalStr[1200];
	int i, j, len;

	while(cin.getline(s, 1025))
	{
		// necessary.
		memset(finalStr, 0, 1200 * sizeof(char));
	
		len = strlen(s);

		for(i = 0; '\0' != s[i]; i = j + 1)
		{
			for(j = i; '\0' != s[j] && !isSeperator(s[j]); j++)
			{
				NULL;
			}

			if(3 == j - i && isyou(s[i], s[i + 1], s[i + 2]))
			{
				s[i] = FLAG1;
			}

			if(3 == j - i && isYou(s[i], s[i + 1], s[i + 2]))
			{
				s[i] = FLAG2;
			}

			if(2 == j - i && iswe(s[i], s[i + 1]))
			{
				s[i] = FLAG3;
			}

			if(2 == j - i && isWe(s[i], s[i + 1]))
			{
				s[i] = FLAG4;
			}

		}

		i = 0;
		j = 0;
		while(i < len) // do not use while('\0' != s[i]) 
		{
			if(FLAG1 == s[i])
			{
				finalStr[j++] = 'w';
				finalStr[j++] = 'e';
				i += 3;
			}

			else if(FLAG2 == s[i])
			{
				finalStr[j++] = 'W';
				finalStr[j++] = 'e';
				i += 3;
			}

			else if(FLAG3 == s[i])
			{
				finalStr[j++] = 'y';
				finalStr[j++] = 'o';
				finalStr[j++] = 'u';				
				i += 2;
			}

			else if(FLAG4 == s[i])
			{
				finalStr[j++] = 'Y';
				finalStr[j++] = 'o';
				finalStr[j++] = 'u';
				i += 2;
			}
			
			else
			{
				finalStr[j++] = s[i++];
			}

		}

		cout << finalStr << endl;
	}
	
	return 0;
}

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值