我不明白这里的问题。我研究过它,它编译得很好但是当我运行程序时它给了我“调试断言失败!”错误和上述解释。
#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;
}
答案 0 :(得分:4)
这里有一个错误:
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,如评论中所指出的那样。)
答案 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;
}