Пунктуация C ++ в программе Pig Latin

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

Я уже ненавижу этот «язык»!
Отпуть: Я уже в пути, на этот раз «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

Решение

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]