2017-01-21 12 views
0

Итак, я пытаюсь сделать переводчик Pig Latin, и до сих пор моя программа работает, но есть только одна проблема. Я не могу иметь дело с пунктуацией, потому что когда ввод представляет собой целое предложение, например:C++ Пунктуация в латинской программе Pig

Я уже ненавижу этот «язык»! Отпуск: Iway уже atahay atthay "anguagelay"!

Что моя программа делает, игнорируя пунктуацию, поэтому она не появляется на выходе. Это то, что у меня есть:

#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 :: string, так и массивы char? И никогда не используйте strtok. –

+0

Потому что я новичок в C++ и просто изучаю, что использовать, а что нет. Я просто пытаюсь использовать разные вещи, чтобы найти что-то, что работает. – Nysalla

ответ

0

strtok выбрасывает разделители, и так как вы указали все виды знаков препинания в качестве разделителя, то поведение, которое вы видите, как ожидается.

Если вы хотите сохранить пунктуацию, используйте вместо этого strtok(sentence, " "), а затем добавьте логику в PigLatin, которая будет обрабатывать символы не алфавита по-разному. Лучший способ, который я могу придумать для этого, - написать цикл for над символами в строке, выписывая их один за другим, со специальной логикой для обработки первого и последнего символов алфавита.