Pig Latin Program中的C ++标点符号

时间:2017-01-21 20:48:09

标签: c++ punctuation

所以我正在努力创建一个Pig Latin翻译器,到目前为止我的程序工作,但只有一个问题。我无法处理标点符号,因为当输入是一整句时,如:

  

我已经讨厌那种"语言"!   Otput:Iway hasway atehay 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;
}

1 个答案:

答案 0 :(得分:0)

strtok抛出了分隔符,因为您已将所有类型的标点符号指定为分隔符,所以您预期会看到的行为。

如果您想保留标点符号,请改用strtok(sentence, " "),然后将逻辑添加到PigLatin,以便以不同方式处理非字母字符。我能想到的最好的方法就是在字符串中的字符上写一个for循环,逐个写出来,用特殊的逻辑来处理第一个和最后一个字母字符。