山羊拉丁文

一、题目解释:

字符串:

  1. 给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。

单词:

  1. 如果一个单词以元音开头(即AEIOU或aeiou),那么在这个单词末尾添加ma 
  2. 如果不是以元音开头,那么将第一个字母移动到当前单词末尾,并在后面添加ma
  3. 在所有单词末尾再额外添加n个a。n为当前单词在句子中的次序,从1开始。即,在第1个单词按以上规则转换完成后,再加1个a。在第2个单词末尾加2个a,第3个加3个a,以此类推 

 字符串:

  1. 返回新的字符串

 

二、思路解释:

  1. 把指定字符串拆分成若干个单词,存放在一个二维数组中;
  2. 分割后判断第一个字母是不是元音字母,不是则将首字母放到单词末尾;
  3. 再在单词末尾添加ma;
  4. 根据二维数组的行索引,在单词末尾添加相应的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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值