【问题标题】:Converting from letter into a word从字母转换成单词
【发布时间】:2014-05-24 09:19:10
【问题描述】:

总的来说,这是分配的一小部分,但这个函数给我一个错误“调试断言失败!”

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

错误提示:

调试断言失败!

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

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

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

(按重试调试应用程序)

任何解决此错误的帮助或建议将不胜感激。

【问题讨论】:

    标签: c++ string debugging assertion


    【解决方案1】:
    for (int i = 0; i <= word.length(); ++i)
    

    应该是

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

    N 大小容器的下标范围从 0 到 N-1

    【讨论】:

    • 谢谢!为此我苦苦挣扎了很久。
    • 是的,C++ 中的所有索引都是基于 0 的,因此可以将所有索引视为 0 到 n-1,您应该不会错太多。
    【解决方案2】:

    您的函数中有几个错误。主要错误是不清楚该函数的作用。:) 它要求用户只输入一个字符或一个字符的单词。

    类 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 )
    

    秒错误是变量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;
    

    函数中也没有使用。

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 2015-01-03
      • 1970-01-01
      • 2023-02-25
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      相关资源
      最近更新 更多