将字母转换成单词

Converting from letter into a word

本文关键字:单词 转换      更新时间:2023-10-16

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

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

我截取了错误信息的截图:https://i.stack.imgur.com/CGq98.png

错误提示:

调试断言失败!

计划:. .颜色]English.SMS_Translator 调试 English._SMS_Translator.exe文件:e:microsoft visual studio 10.0vcincludexstring Line:1440

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

有关程序如何导致断言失败的信息,

(按重试键调试应用程序)

如果有任何帮助或建议解决这个错误,我将不胜感激。
for (int i = 0; i <= word.length(); ++i)
应该

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

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

你的函数中有几个错误。主要的错误是它不清楚该函数的作用:)它要么要求用户只输入一个字符,要么输入一组字符。

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

在函数中也不使用