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

时间:2016-04-19 22:19:25

标签: c++ string while-loop erase boolean-expression

我有一个C ++程序,可以找到并删除给定字符串中的任何元音。唯一的问题是,它不起作用,我找不到原因。我必须使用 2个函数来删除所有元音,而另一个函数决定一个字符是否是元音,所有这些都应该在循环中运行。

这是我的代码:

var phantom = require('phantom');
var rl = require('readline-sync');
var Spooky = require('spooky');

// Go to login page
spooky.start(url);

// Generate an image of the captcha 
spooky.then(function () {
  this.capture('captcha.png');
});

// Fill in login form
  spooky.then([{
    captcha: new Captcha()
  }, function () {
    this.fill('form#login-form', {
      'username': 'username',
      'password': 'password',
      'recaptcha_response_field' : captcha.phrase
    });
  }]);

  spooky.wait(5000, function() {
    this.capture('afterlogin.png');
  });

  spooky.run();

function Captcha() {
  return {
    phrase: ask("Enter Captcha Phrase: ")
  }
}

function ask (msg, options){
  return rl.question(msg, options)
}

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

1 个答案:

答案 0 :(得分:0)

好吧,我很乖,心情很好,所以在这里。

#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循环中不要使用unsigned int,只需使用int!

  2. 一般来说,你不应该像你在这里做的那样直接回归真或假,有各种各样的原因,我相信你的教授会覆盖它们。但是对于所有意图和目的,声明一个布尔变量(bool vowel = true)是一个例子,你可以在你的回归中使用它。

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

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

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

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

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

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