#include <iostream>
#include <string>
using namespace std;
string Latin(string words)
{
string strWord, strSentence = "";
int length = 0, index = 0;
while (words[index] != '\0')
{
if(words.find(' ', index) != -1)
{
length = words.find(' ', index);
length -= index;
strWord = words.substr(index,length);
strWord.insert(length, "ay");
strWord.insert(length, 1, words[index]);
strWord.erase(0,1);
index += length +1;
}
else
{
strWord = words.substr(index);
length = strWord.length();
strWord.insert(length, "ay");
strWord.insert(length,1,words[index]);
strWord.erase(0,1);
index = words.length();
}
strSentence += (strWord + " ");
}
return strSentence;
}
int main()
{
string str;
getline(cin,str);
str = Latin(str);
cout<<str<<endl;
return 0;
}
这个错误
我不知道该怎么做。由于我是新手,这是一个程序,假设要求用户输入一定长度的单词并将其翻译成猪拉丁语。任何帮助将不胜感激。
答案 0 :(得分:1)
除非我真的想让自己的生活变得困难,否则我的表现会有所不同。首先,我使用std::stringstream
将输入字符串分解为要处理的单词。然后,我使用std::rotate
将字符串的第一个字符移动到结尾。最后,我将所有内容包装在std::transform
中以管理将函数连续应用于每个单词。
std::string line;
std::getline(std::cin, line);
std::stringstream buffer(line);
std::stringstream result;
std::transform(std::istream_iterator<std::string>(buffer),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(result, " "),
[](std::string s) {
std::rotate(s.begin(), s.begin() + 1, s.end());
s += "ay";
return s;
});
当然,这并不知道像sh
或ch
那样以元音或字母对开头的单词的特殊规则,但它看起来像是在任务范围之外手。
有关std::rotate
的更多信息,建议您观看Sean Parent的一些视频。