2016-04-19 6 views
-4

私は与えられた文字列中の母音を見つけて消去するC++プログラムを持っています。唯一の問題は、それはうまく動作せず、理由を見つけることができません。私は2つの関数を使う必要があります。すべての母音を削除し、もう1つは、母音か母音かを判断して、すべてがループで動作するようにします。私はそれが前に働いて、今それが適切に実行し、すべての母音を消去されませんでした母音を読み込んでそれらを消去するプログラムは正しく実行されません。

#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); 
} 

は、これは私のコードです。 提案やヒントは素晴らしいです! ありがとうございます!

+4

デバッガでコードをステップ実行します。 –

+0

これは、デバッガに慣れ親しむ良い機会になります。問題は、コードをステップ実行するときにははっきりしているはずです。 –

+0

上記の2つに加えて、これをif文ではなく、if文にする必要があります。もう一度試してみたら、これを行うためのより簡単な方法をあなたに教えてあげます...しかし、あなたが正直ではあなたが遠く離れていないので、あなたがもう少し試してみてください:) – Afflicted

答えて

0

申し訳ありませんが、よく私はimpantientと良い気分で、だからここに。あなたが持った

#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. ループのためだけのint型を使用し、unsigned int型を使用しないでください!

  2. ここでやっているように、本当に真実か偽りの「真っ直ぐな」ものを返すべきではありません。さまざまな理由があります。教授がそれらをカバーすると確信しています。しかし、すべての目的と目的のためにブール変数(bool vowel = true)を宣言すると、それをあなたのリターンで使うことができます。

  3. これはループ構造のない独自のif文を使用しているため(問題が残っていても)、一度だけ実行されるため、母音が1つしか見つからないことを意味します。あなたはまた真実に戻りますが、あなたはそれを扱うロジックを提供していません。

    たとえば、trueを返すときに何を起こしたいのですか、falseを返すときに何をしたいのですか?

  4. cinを使用していて、複数の単語(空白)を使用しないgetline(cin、input)を使用しています。 (入力変数は入力変数)

  5. 私は実際にあなたのコードを誤読しましたが、ここでは明確にするためにコメントを変更しました。あなたはあなたの関数で母音s.erase(i、1)を削除すると言っています。基本的には、文字列中の0の位置から開始して1つ前の位置を反復し、開始点と終了点を削除します(開始点は0の終了点が1になります)。

最初の位置を覚えているあなたは、私はあなたが私に教えてください、私はあなたにそれを説明します提供されているコードについての質問を持っていれば0でない1.

です!

関連する問題