所以我正在努力创建一个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;
}
答案 0 :(得分:0)
strtok
抛出了分隔符,因为您已将所有类型的标点符号指定为分隔符,所以您预期会看到的行为。
如果您想保留标点符号,请改用strtok(sentence, " ")
,然后将逻辑添加到PigLatin
,以便以不同方式处理非字母字符。我能想到的最好的方法就是在字符串中的字符上写一个for循环,逐个写出来,用特殊的逻辑来处理第一个和最后一个字母字符。