概述
单词自动校对程序
规则:
- 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello
- 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello
- 上面的规则优先“从左到右”匹配,即如果是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);
}
输出结果如下
最后
以上就是健忘往事为你收集整理的一种简单的修改拼写错误的全部内容,希望文章能够帮你解决一种简单的修改拼写错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复