说实话,这个题目挺难的,要综合考虑多种情况,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;
}