一、题目解释:
字符串:
- 给定一个由空格分割单词的句子
S
。每个单词只包含大写或小写字母。
单词:
- 如果一个单词以元音开头(即AEIOU或aeiou),那么在这个单词末尾添加
ma
- 如果不是以元音开头,那么将第一个字母移动到当前单词末尾,并在后面添加
ma
- 在所有单词末尾再额外添加n个
a
。n为当前单词在句子中的次序,从1开始。即,在第1个单词按以上规则转换完成后,再加1个a。在第2个单词末尾加2个a,第3个加3个a,以此类推
字符串:
- 返回新的字符串
二、思路解释:
- 把指定字符串拆分成若干个单词,存放在一个二维数组中;
- 分割后判断第一个字母是不是元音字母,不是则将首字母放到单词末尾;
- 再在单词末尾添加ma;
- 根据二维数组的行索引,在单词末尾添加相应的n+1个a;
#include<iostream>
#include<string>
#include<cstring>
#define m 100
using namespace std;
class D
{
public:
string Togoad(string S)
{
S += " ";
int count = 0;
const char* t;
t= S.c_str(); //将string转换为char字符串,方便之后遍历
string temp="";
string words[m];
for (int i = 0; i < S.size(); i++)
{
if (t[i] != *" ")
temp =temp+ S[i];
else
{
words[count]=temp;
temp = "";
count++;
}
}
for (int k = 0; k < count; k++)
{
if (words[k][0] == 'a' || words[k][0] == 'e' || words[k][0] == 'i' || words[k][0] == 'o' || words[k][0] == 'u' || words[k][0] == 'A' || words[k][0] == 'E' || words[k][0] == 'I' || words[k][0] == 'O' || words[k][0] == 'U')
{
words[k] = words[k] + "ma";
for (int n = 0; n < k + 1; n++)
words[k] += "a";
}
else
{
char temp1 = words[k][0];
for (int t = 0; t < words[k].size() - 1; t++)
{
words[k][t] = words[k][t + 1];
}
words[k][words[k].size() - 1] = temp1;
words[k] = words[k] + "ma";
for (int n = 0; n < k + 1; n++)
words[k] += "a";
}
}
string result = "";
for (int i = 0; i <count; i++)
{
result += words[i] + " ";
}
int nums = result.size() - 1;
result.resize(nums);
return result;
}
private:
};
int main()
{
D n;
string g = "I speak Goat Latin";
string s=n.Togoad(g);
cout << s << endl;
return 0;
}