簡體   English   中英

出現錯誤“表達式:字符串下標超出范圍”

[英]Getting error “Expression: string subscript out of range”

我不明白這里的問題。 我已經對其進行了研究,但它可以正常編譯,但是當我運行該程序時,它提示我“調試斷言失敗!” 錯誤和上面的解釋。

#include <iostream>
#include <string>
using namespace std;


bool checkVowel(char ch)
{
 switch(ch)
 {
     case 'a':
     case 'A':
     case 'e':
     case 'E':
     case 'i':
     case 'I':
     case 'o':
     case 'O':
     case 'u':
     case 'U':
          return true;
     default:
          return false;
 }}
int main()
{
string str;
char ch;
cout<<"Please enter a string, all vowels will be removed: ";
cin >> str;

for (int i=0;i=str.length();i++)
{

 if (checkVowel(str[i]))
     {
        str=str.erase(i);
 }}

cout << str;
}

一個錯誤在這里:

i=str.length()

應該:

i < str.length()

在您的初始代碼中,當字符串非空時, i=str.length()將始終返回true。 因此,結果是您將超出字符串。

此外,當您找到元音時,您不想增加索引,否則您將跳過下一個字符:

for (int i = 0; i < str.length(); )
{
    if (checkVowel(str[i]))
    {
        str.erase(i,1);
    }else{
        i++;
    }
}

最后一件事: str=str.erase(i); 不必要,只需str.erase(i,1); 足夠。 (您需要第二個參數為1,如注釋中所指出。)

對於條件錯誤,應該是for (int i=0;i <= str.length();i++)

或者,您可以使用STL remove_if

remove_if(str.begin(), str.end(), checkVowel);

完整的程序將。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool checkVowel(char ch){
    switch(ch){
        case 'a':
        case 'A':
        case 'e':
        case 'E':
        case 'i':
        case 'I':
        case 'o':
        case 'O':
        case 'u':
        case 'U':
            return true;
        default:
            return false;
    }
}
int main(){
    string str;
    char ch;
    cout << "Please enter a string, all vowels will be removed: ";
    cin >> str;
    remove_if(str.begin(), str.end(), checkVowel);
    cout << str;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM