LeetCode-824. Goat Latin(字符串分割)

版权声明:原创文章要转载的话麻烦请dalao注明出处呢٩(๑❛ᴗ❛๑)۶ https://blog.csdn.net/MIKASA3/article/details/80178378

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;
}

AC代码:
#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;
}


猜你喜欢

转载自blog.csdn.net/MIKASA3/article/details/80178378