题解 CF938A 【Word Correction】
STL大法好,602ms,速度第4
代码来了,用的是STL库的string和布尔类型flag的搭配
代码有注释
#include <iostream>
#include <cstring>//string头文件
using namespace std;
int main()
{
int n;
bool flag = false;//初始值为false
string str;
cin >> n >> str;
while(!flag)//不会死循环的
{
flag = true;
for(string::iterator it = str.begin(); it != str.end(); it++)//string迭代器
{
if(*it == 'a' || *it == 'e' || *it == 'i' || *it == 'o' || *it == 'u' || *it == 'y')//判断是否元音,用*访问迭代器指向的那个数据
{
if(*(it + 1) == 'a' || *(it + 1) == 'e' || *(it + 1) == 'i' || *(it + 1) == 'o' || *(it + 1) == 'u' || *(it + 1) == 'y')
{
str.erase(it + 1);//删除it + 1位置的数据
}
}
}
for(int i = 0; i <= str.length() - 1; i++)//这里不用迭代器了,length读取string长度
{
if(str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u' || str[i] == 'y')
{
if(str[i + 1] == 'a' || str[i + 1] == 'e' || str[i + 1] == 'i' || str[i + 1] == 'o' || str[i + 1] == 'u' || str[i + 1] == 'y')
{
flag = false;//如果还有两个相邻元音,flag等于false
break;//break不能少
}
else
{
flag = true;//否则flag变为true
}
}
else
{
flag = true;//否则flag变为true
}
//如果flag为true的话会停止循环
}
}
cout << str << endl;
return 0;
}

浙公网安备 33010602011771号