读取元音并擦除元音的程序将无法正常运行
Program that reads vowels and erases them won't run properly
我有一个C++程序,它可以查找并擦除给定字符串中的任何元音。唯一的问题是,它不起作用,我找不到原因。我必须使用2个函数来删除所有元音,另一个函数用于确定字符是否为元音,所有这些都应该在循环中操作。
这是我的代码:
#include <iostream>
#include <string>
using namespace std;
bool isA_Vowel(string s);
string remov(string s);
int main()
{
string s;
string ans = "y";
while((ans == "Y") || (ans == "y"))
{
cout << "Please enter a word or a series of letters: ";
cin >> s;
cout << "Old: " << s << endl;
cout << "New: " << remov(s) << endl;
cout << "Would you like to go again? <y/n> ";
cin >> ans;
}
}
bool isA_Vowel (string s)
{
if (s == "a" || s == "e"|| s == "i" || s == "o" || s == "u" || s == "A"
|| s == "E" || s == "I" || s == "O" || s == "U")
{
return (true);
}
else
{
return (false);
}
}
string remov(string s)
{
for (unsigned int i = 0; i < s.length(); ++i)
{
if (isA_Vowel(s))
{
s.erase(i,1);
}
}
return(s);
}
我以前用过它,但现在它无法正常运行,无法擦除所有元音。任何建议或提示都会很棒!提前谢谢!
好吧,我没有影响力,心情很好,所以在这里。
#include <iostream>
#include <string>
bool isVowel(char ch);
void removeVowels(std::string& str);
int main()
{
std::string Text = "";
std::cout << "Please enter a string, what ever you like: ";
std::getline(std::cin, Text);
removeVowels(Text);
std::cout << Text << std::endl;
return 0;
}
bool isVowel(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;
}
}
void removeVowels(std::string& str)
{
int len = str.length();
int index = 0;
while (index < len)
{
if (isVowel(str[index]))
{
str = str.substr(0, index) + str.substr(index + 1, str.length());
len = str.length();
}
else index++;
}
}
你遇到的问题是
我以前用过它,但现在它无法正常运行,无法擦除所有元音。任何建议或提示都会很棒!提前谢谢!
在for循环中,不要使用无符号的int,只使用int!
一般来说,你不应该真的只返回真或假;直的";正如你在这里所做的,原因有很多,我相信你的教授会涵盖这些。但是为了所有的意图和目的,声明布尔变量(bool元音=true)就是一个例子,您可以在返回中使用它。
因为你使用的if语句本身没有循环结构(即使有循环结构,你也会有问题),它只执行一次,这意味着它最多只能找到一个元音。您也返回true,但没有提供处理它的逻辑。
例如,当它返回true时,你希望发生什么?当它返回false时,你想要它做什么?
你正在使用cin,它不会也不会使用多个单词(空格)使用getline(cin,input);(输入是您的输入变量)
事实上,我误读了你的代码,我在这里更改了评论以澄清。你在函数中说去掉元音s.erase(i,1);本质上,您所做的是从字符串中的位置0开始,向前迭代1个位置,并删除起点和终点(起点为0,终点为1)。
记住第一个位置是0而不是1。
如果你对我提供的代码有疑问,请告诉我,我会向你解释的!
相关文章:
- 引用一个已擦除类型(void*)的指针
- 擦除while循环中迭代的元素
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- C++擦除(如果存在)
- 在映射擦除c++期间执行循环的次数
- 为什么擦除方法会影响结束方法
- C++ 字符串类擦除成员函数的时空复杂性
- 类型擦除的std::function与虚拟函数调用的开销
- C++14 中unordered_map矢量和擦除删除成语的奇怪行为
- C++ 擦除函数中需要澄清
- 删除[]是否可以与通用数组正常使用?如果是这样,为什么使用std :: vector ::擦除它会导致释放内存的错误
- 向量擦除功能无法正常工作
- 矢量未正确擦除内容(复制分配运算符的量运行直到崩溃 [BEX])
- 使用类型擦除创建运行时type_traits查询
- 读取元音并擦除元音的程序将无法正常运行
- unique_ptr类型擦除析构函数不能正常工作(带有警告)
- C++特定索引处的矢量擦除无法使其正常工作
- 如何在每次运行后不擦除用户指定的值
- 向量迭代器擦除给我一个运行时错误
- 在运行时擦除持有pthread的变量