程序获取“表达式:字符串下标超出范围”

时间:2015-12-02 19:03:20

标签: c++ windows

#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

这个错误

我不知道该怎么做。由于我是新手,这是一个程序,假设要求用户输入一定长度的单词并将其翻译成猪拉丁语。任何帮助将不胜感激。

1 个答案:

答案 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; 
    });

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

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