程序获取“expression式:string下标超出范围”

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

我得到这个错误说 http://imgur.com/OI0TgBG

我不知道该怎么做。 正如我刚刚所说,这是一个程序,它是要求用户input一段文字,并将它们翻译成猪拉丁文。 任何帮助将不胜感激。

除非我真的想让自己的生活变得困难,否则我会做得有点不同。 首先,我会使用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; }); 

当然,这并不知道像元音或字母对(如shch开头的单词的特殊规则,但它看起来不在手头任务的范围之内。

有关std::rotate更多信息,我建议您观看一些Sean Parent的视频。