从字母转换为单词

时间:2014-05-24 09:19:11

标签: c++ string debugging assertion

总的来说,这只是作业的一小部分,但是这个函数给我一个错误“Debug Assertion Failed!”

void English_to_SMS(void)
{
    int i;
    bool vowel;
    string word;
    string letter;

    cout << "Enter y, n or m: ";
    cin >> word;
    for (int i = 0; i <= word.length(); ++i)
    {
        letter = word[i];
        if (letter == "y") {
        cout << "yes";
        }
        else if (letter == "n") {
            cout << "no";
        }
        else if (letter == "m") {
            cout << "maybe";
        }
        else
        {
            cout << letter ;
    }
}

我截取了错误消息的屏幕截图:http://i.imgur.com/maQN7Vs.png

错误说:

  

Debug Assertion失败!

     

程序:   ..ects] English.SMS_Translator \调试\ English._SMS_Translator.exe   文件:e:\ microsoft visual studio 10.0 \ vc \ include \ xstring Line:1440

     

表达式:字符串下标超出范围

     

有关程序如何导致断言失败的信息,   请参阅关于断言的Visual C ++文档。

     

(按重试调试应用程序)

非常感谢任何帮助或建议来解决此错误。

2 个答案:

答案 0 :(得分:2)

for (int i = 0; i <= word.length(); ++i)

应该是

for (int i = 0; i < word.length(); ++i)

N尺寸容器的下标范围从0到N-1

答案 1 :(得分:0)

你的功能有几个错误。主要的错误是它不清楚函数是做什么的。:)它要么用户只输入一个字符或一个字符。

类std :: string的索引的有效范围是[0,length()-1]。而不是

for (int i = 0; i <= word.length(); ++i)

必须有

for (int i = 0; i < word.length(); ++i)

但是如果你写的话会更好。

for ( string::size_type i = 0; i < word.length(); ++i )

secons错误是变量i的声明

void English_to_SMS(void)
{
    int i;

在函数中没有使用,因为在for循环中你声明了另一个隐藏前一个声明的局部变量i。所以你可以删除声明

    int i;

此外,我认为声明std :: string类型的对象只保留一个字符没有任何意义。所以不是声明

string letter;

我会使用声明

char letter;

例如

char letter;
//...

    letter = word[i];
    if (letter == 'y') {

声明

bool vowel;

也未在函数中使用。