读取元音并擦除元音的程序将无法正常运行

Program that reads vowels and erases them won't run properly

本文关键字:正常运行 擦除 读取 程序      更新时间:2023-10-16

我有一个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++;
   }
}

你遇到的问题是

我以前用过它,但现在它无法正常运行,无法擦除所有元音。任何建议或提示都会很棒!提前谢谢!

  1. 在for循环中,不要使用无符号的int,只使用int!

  2. 一般来说,你不应该真的只返回真或假;直的";正如你在这里所做的,原因有很多,我相信你的教授会涵盖这些。但是为了所有的意图和目的,声明布尔变量(bool元音=true)就是一个例子,您可以在返回中使用它。

  3. 因为你使用的if语句本身没有循环结构(即使有循环结构,你也会有问题),它只执行一次,这意味着它最多只能找到一个元音。您也返回true,但没有提供处理它的逻辑。

    例如,当它返回true时,你希望发生什么?当它返回false时,你想要它做什么?

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

  5. 事实上,我误读了你的代码,我在这里更改了评论以澄清。你在函数中说去掉元音s.erase(i,1);本质上,您所做的是从字符串中的位置0开始,向前迭代1个位置,并删除起点和终点(起点为0,终点为1)。

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

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