难度简单59收藏分享切换为英文接收动态反馈
给定一个由空格分割单词的句子 S
。每个单词只包含大写或小写字母。
我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。
山羊拉丁文的规则如下:
- 如果单词以元音开头(a, e, i, o, u),在单词后添加
"ma"
。
例如,单词"apple"
变为"applema"
。 - 如果单词以辅音字母开头(即非元音字母),移除第一个字符并将它放到末尾,之后再添加
"ma"
。
例如,单词"goat"
变为"oatgma"
。 - 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母
'a'
,索引从1开始。
例如,在第一个单词后添加"a"
,在第二个单词后添加"aa"
,以此类推。
返回将 S
转换为山羊拉丁文后的句子。
示例 1:
输入: "I speak Goat Latin" 输出: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
示例 2:
输入: "The quick brown fox jumped over the lazy dog" 输出: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
说明:
S
中仅包含大小写字母和空格。单词间有且仅有一个空格。1 <= S.length <= 150
。
通过次数19,274提交次数31,127
题目本身就是简单题,那么c语言提供了很多字符串处理函数,刚好可以上。主要就是使用字符串分隔函数,字符串赋值函数,最后注意返回的是一个静态变量,临时变量是无法返回的。
char * toGoatLatin(char * sentence){
char *p[100];
char *token=" ";
char *aaaa="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
int i=0;
p[i]=strtok(sentence, token);
while(p[i]!=NULL)
{
p[++i]=strtok(NULL, token);
}
static char retp[2048];
memset(retp,'\0',2048);
for(int j=0;j<i;j++)
{
if(p[j][0]=='a' || p[j][0]=='A' || p[j][0]=='e' || p[j][0]=='E'|| p[j][0]=='i'|| p[j][0]=='I'|| p[j][0]=='o'|| p[j][0]=='O'|| p[j][0]=='u'|| p[j][0]=='U')
{
strcat(retp,p[j]);
strcat(retp,"ma");
strncat(retp,aaaa,j+1);
}
else
{
strcat(retp,&p[j][1]);
strncat(retp,p[j],1);
strcat(retp,"ma");
strncat(retp,aaaa,j+1);
}
if(j<i-1)
{
strcat(retp," ");
}
}
return retp;
}
执行结果:
通过
显示详情
添加备注
执行用时:0 ms, 在所有 C 提交中击败了100.00%的用户
内存消耗:5.7 MB, 在所有 C 提交中击败了100.00%的用户
通过测试用例:99 / 99