C#实现Pig Latin转换时3.3数字处理结果异常问题求助
问题根因
你的代码默认所有单词的首字符都是英文字母,没有对数字、标点等非字母字符做特殊处理,这是导致3.3转换错误的核心原因:
- 处理
3.3时,首字符3不在你定义的元音列表AEIOUYaeioy中,会触发辅音转换逻辑 - 代码将首字符
3移到剩余内容.3的末尾,再拼接ay,最终得到错误结果.33ay
修复方案
根据你给出的预期输出,非字母开头的单词不需要做猪拉丁语转换,直接保留原内容即可。你可以在转换前增加首字符是否为英文字母的判断,修改后的代码如下:
Console.WriteLine("Give a sentence: "); string sentence = Console.ReadLine(); string pigLatin = ToPigLatin(sentence); Console.WriteLine(pigLatin); static string ToPigLatin(string sentence) { const string vowels = "AEIOUYaeioy"; List<string> pigWords = new List<string>(); foreach (string word in sentence.Split(' ')) { // 新增判断:如果单词为空或者首字符不是英文字母,直接保留原单词 if (string.IsNullOrEmpty(word) || !char.IsLetter(word[0])) { pigWords.Add(word); continue; } string firstLetter = word.Substring(0, 1); string restOfWord = word.Substring(1, word.Length - 1); int currentLetter = vowels.IndexOf(firstLetter); if (currentLetter == -1) { pigWords.Add(restOfWord + firstLetter + "ay"); } else { pigWords.Add(word + "way"); } } return string.Join(" ", pigWords); }
运行修改后的代码,输入3.3 is a double就能得到你预期的3.3 isway away oubleday结果。
内容的提问来源于stack exchange,提问作者Aleksandar Yordanov
相关产品推荐
相关产品推荐

