824 。山羊拉丁文
S
给出一个句子,由用空格分隔的单词组成。每个单词只包含小写字母和大写字母。
我们想将句子转换成“ 山羊拉丁语” (一种类似于拉丁语的化妆语言)。
山羊拉丁文规则如下:
- 如果一个单词以元音开头(a,e,i,o或u),则追加
"ma"
到单词的末尾。
例如,'apple'这个词变成'applema'。
- 如果一个词以辅音开头(即不是元音),删除第一个字母并将其附加到最后,然后添加
"ma"
。
例如,这个词"goat"
变成了"oatgma"
。
'a'
在每个单词的末尾添加一个字母,每个单词的索引在句子中,从1开始。
例如,第一个单词被"a"
添加到结尾,第二个单词被"aa"
添加到结尾,依此类推。
返回代表从S
Goat Latin 转换成的最后一句。
Example 1:
Input: "I speak Goat Latin" Output: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa"
Example 2:
Input: "The quick brown fox jumped over the lazy dog" Output: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa"
Notes:
S
contains only uppercase, lowercase and spaces. Exactly one space between each word.1 <= S.length <= 150
.
主要是分割字符串的两种方法:
方法一:
C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件。
istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于执行C风格的串流的输出操作。
strstream类同时可以支持C风格的串流的输入输出操作。
istringstream的构造函数原形如下:
istringstream::istringstream(string str);
它的作用是从string对象str中读取字符。
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
string str, line;
while(getline(cin, line))
{
istringstream stream(line);
while(stream>>str)
cout<<str.c_str()<<endl;
}
return 0;
}
测试:
Input:
Abdc Xcs Xa Xa
Output:
Abdc
Xcs
Xa
AC代码:#include<bits/stdc++.h>
using namespace std;
/********************提交代码********************/
class Solution
{
public:
string toGoatLatin(string S)
{
vector<string> ve;
string str,s,a="a",ans="";
ve.clear();
istringstream stream(S);
bool flag=false;
while(stream>>str)
{
s=str.c_str();
if(s[0]=='a'||s[0]=='e'||s[0]=='i'||s[0]=='o'||s[0]=='u'||s[0]=='A'||s[0]=='E'||s[0]=='I'||s[0]=='O'||s[0]=='U')
s+="ma";
else
{
s+=s[0];
s.erase(0,1);
s+="ma";
}
s+=a;
a+="a";
if(!flag)//first one
flag=true;
else
ans+=" ";
ans+=s;
}
return ans;
}
};
/***************************************************/
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("F:/cb/read.txt","r",stdin);
//freopen("F:/cb/out.txt","w",stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
string line;
while(getline(cin,line))
{
Solution s;
cout<<"/"<<s.toGoatLatin(line)<<"/"<<endl;;
}
return 0;
}
方法二:
char *strtok(char s[], const char *delim);
参数分别是,“待分割的字符串”,“分隔符”
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char sentence[]="This is a sentence with 7 tokens";
char *tokenPtr=strtok(sentence," ");
while(tokenPtr!=NULL)
{
cout<<tokenPtr<<endl;
tokenPtr=strtok(NULL," ");
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
/********************提交代码********************/
class Solution
{
public:
string toGoatLatin(string S)
{
string s,a="a",ans="";
int len=S.length();
char str[len];
strcpy(str,S.c_str());
char*temp = strtok(str," ");
bool flag=false;
while(temp)
{
s=temp;
if(s[0]=='a'||s[0]=='e'||s[0]=='i'||s[0]=='o'||s[0]=='u'||s[0]=='A'||s[0]=='E'||s[0]=='I'||s[0]=='O'||s[0]=='U')
s+="ma";
else
{
s+=s[0];
s.erase(0,1);
s+="ma";
}
s+=a;
a+="a";
if(!flag)//first one
flag=true;
else
ans+=" ";
ans+=s;
temp=strtok(NULL," ");
}
return ans;
}
};
/***************************************************/
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("F:/cb/read.txt","r",stdin);
//freopen("F:/cb/out.txt","w",stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
string line;
while(getline(cin,line))
{
Solution s;
cout<<"/"<<s.toGoatLatin(line)<<"/"<<endl;;
}
return 0;
}