[英]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.