一种简单的修改拼写错误

单词自动校对程序

规则:

  1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello
  2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello
  3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC。

输入描述:
第一行包括一个数字N,表示本次用例包括多少个待校验的字符串。

后面跟随N行,每行为一个待校验的字符串。

输出描述:
N行,每行包括一个被修复后的字符串。

输入例子1:
3
helloo
helllo
wooooooow
输出例子1:
hello
hello
woow

根据以上规则首先进行字符的输入:

string * input()//输入N组字符
{
	cin >> N;
	string *s= new string[N];
	for (int i = 0; i < N; i++)
	{
		cin >> s[i];
	}
	return s;
}

之后对字符进行读取判段分为AAA型与AABB型或AABBCC型

void  Reading(string *s)   //读取字符
{
	
	for (int i = 0; i < N; i++)
	{ 
		char *p1 = &s[i][0];   //第一个指针指向字符的首部
		char *p2 = &s[i][1];   //第二个指针指向字符的第二个位置
		char temp = 0;    //用于存第一次重复出现的字符
		int num = 0;     //记录字符相等的次数
		int flag = 0;   //记录不相等的次数
		for (int j = 0; j < s[i].length(); j++)//按序读取字符
		{
			if (*p1 == *p2)
			{
				num++;    //相等次数加一
				if (num == 1)
				{
					 temp = *p1;  //第一次重复出现的字符
				}
				else
				{
					if (*p2 == temp)//为AAA型
					{
						
					   s[i]=s[i].substr(0,j-1)+AAA(s[i].substr(j-1, 3))+s[i].substr(j+2,s[i].length()-j-2);
					   p1 = &s[i][0];
					   p2 = &s[i][1];
					   num = 0;
					   j = -1;
					   temp = 0;
					   continue;
					}
					else if (*p2 != temp)//为AABB型或AABBCC型
					{
						
							s[i] = s[i].substr(0, j - 2) + AABB(s[i].substr(j - 2, 3)) + s[i].substr(j + 2, s[i].length() - j - 2);
							p1 = &s[i][0];
							p2 = &s[i][1];
							num = 0;
							j = -1;
							temp = 0;
							continue;
					}
				}
				p1++; p2++; flag = 0;  //后移指针,清除不相等的记录
			}
			else
			{
				flag++;  //不相等记录加一
				if (flag == 2)  //排除了AAA和AABB的情况
				{
					num = 0;
					flag = 0;
					p1++;
					p2++;
				}
				else     //后移指针
				{
					p1++;
					p2++;
					
				}
			}
		  
		}
	}
	
}

分别对传入的类型进行处理
AAA型字符段的处理:

string AAA(string & aaa)//出现AAA型时进行解决
{
	aaa = aaa.substr(0, 2);
	return aaa;
}

AABB型的处理

string AABB(string aabb)//出现AABB型时进行解决
{
	aabb = aabb.substr(0, 3);
	return aabb;
}

处理完就剩最后一步了进行输出啦

void Output(string *s)    //输出修改后的字符
{

	for (int i = 0; i < N; i++)
	{
		cout << s[i] << endl;
	}
}

最后在main()函数中运行

int main()    
{
	string *p = input();
	Reading(p);
	Output(p);
}

输出结果如下
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值