2017-01-21 5 views
0

私はPig Latin Translatorを作成しようとしていますが、これまでのところ私のプログラムは動作しますが、問題は1つだけです。入力が文全体のようなものである場合、私は句読点を扱うことができません:Pig Latin ProgramのC++句読

私はすでにその "言語"が嫌です! オットプット:「アングラゲイ」で既にアテーイ・アットエイ・アウェイに!

私のプログラムでは句読点を無視しているため、出力には表示されません。

#include <iostream> 
#include <cstring> 
#include <string> 

using namespace std; 

bool IsVowel(char letter) 
{ 
switch(letter) 
{ 
    case 'A': 
    case 'E': 
    case 'I': 
    case 'O': 
    case 'U': 
    case 'Y': 
    case 'a': 
    case 'e': 
    case 'i': 
    case 'o': 
    case 'u': 
    case 'y': 
     return true; 

    default: 
     return false; 
} 
} 



void PigLatin(char *word) 
{ 
string s1(word); 
string s2; 

if(IsVowel(word[0]) == true) s2 = s1 + "way"; 
else s2 = s1.substr(1) + s1[0] + "ay"; 

cout << s2 << " "; 
} 

int main() 
{ 
char sentence[10000]; 
char *words; 

cin.getline(sentence, 10000); 
words = strtok(sentence, " ,.!:;""?"); 

while (words != NULL) 
{ 
    PigLatin(words); 
    words = strtok(NULL, " ,.!:;""?"); 
} 
return 0; 
} 
+0

特定の質問をする必要があります。これほど広すぎます。 「どうすればいいの?」といった質問。また広いだろう。解決策を試してから、問題が発生したときに特定の質問をしてください。 – Carcigenicate

+0

なぜstd :: stringsとcharの配列の両方を使用していますか?そして、strtokを使用しないでください。 –

+0

私はC++を初めて使い、何を使うべきか、何をしないのかを学ぶだけなので。私は、動作するものを見つけるために、さまざまなものを使用してみてください。 – Nysalla

答えて

0

strtokは、区切り文字を投げ、そしてあなたが区切り文字として句読点のすべての種類を指定したことから、あなたが見ている行動が期待されている:これは私が持っているものです。

句読点を残したい場合は、代わりにstrtok(sentence, " ")を使用し、アルファベット以外の文字を異なる方法で処理するロジックをPigLatinに追加します。私が考えることができる最善の方法は、最初と最後のアルファベット文字を処理する特別なロジックを使用して、文字列内の文字をforループで書き、1つずつ書き出すことです。