这个从当前向前遍历,看是否需要加空格。暴力就行了
#include <cstdio>
char s[3002];
int c[3001], N;
inline int vo(char x)
{
return x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u';
}
void print(int i)
{
if (c[i])
{
print(c[i]);
putchar(' ');
}
for (int j = c[i] + 1; j <= i; j++)
putchar(s[j]);
}
int main()
{
scanf("%s", s + 1);
while (s[N + 1])
N++;
for (int i = 1; i <= N; i++)
{
int ext = i, con = !vo(s[i]), dif = 0;
while (con <= 2 || dif == 0)
{
ext--;
if (ext == 0)
break;
if (vo(s[ext]))
{
con = 0;
dif = 0;
}
else
{
if (con && s[ext] != s[ext + 1])
dif = 1;
con++;
}
}
c[i] = ext;
}
print(N);
puts("");
return 0;
}