读取元音并擦除它们的程序不会 运行 正确

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

}

您遇到的问题是

I had it working before, but now it won't run properly and erase all the vowels. Any suggestions or tips would be awesome! Thank you in advance!

  1. 在你的 for 循环中不要使用 unsigned int,只使用 int!

  2. 一般来说,您不应该真的只是 return 对或错“直接”,就像您在此处所做的那样,原因有很多,我相信您教授会覆盖他们。但出于所有意图和目的,声明一个布尔变量 (bool vowel = true) 就是一个示例,您可以在 return.

    中使用它
  3. 因为你自己使用了一个没有循环结构的 if 语句(即使有一个你仍然有问题)它只执行一次这意味着它最多只能找到一个元音。你也 return 是真的,但你没有提供处理它的逻辑。

    例如,当它 return 为真时你希望它发生什么,当它 return 为假时你希望它做什么?

  4. 您使用的 cin 不会也不会使用多个单词(空格)使用 getline(cin, input); (输入是您的输入变量)

  5. 实际上我误读了您的代码,我已更改此处的注释以进行澄清。你在你的函数中说要删除元音 s.erase(i, 1);本质上,您正在做的是从字符串中的位置 0 开始,向前迭代 1 个位置并删除起点和终点(起点为 0,终点为 1)。

记住第一个位置是 0 而不是 1。

如果您对我提供的代码有任何疑问,请告诉我,我会向您解释!