C#实现姓名指定字母转大写时for循环长度不匹配问题求助
问题根因
你的代码核心问题出在第三个for循环的逻辑:你用指定字母的长度作为循环上限,仅能匹配姓名中与指定字母下标相同位置的字符,无法覆盖姓名全长度的匹配场景,比如输入指定字母jn时,只会检查姓名第0位是否是j、第1位是否是n,自然找不到姓名第3位的n做转换。同时你做了很多多余的char转string数组的操作,逻辑可以大幅简化。
修正后可直接运行的代码
// 读取输入姓名 Console.WriteLine("Insert your name:"); string name = Console.ReadLine() ?? string.Empty; // 读取需要转为大写的字母 Console.WriteLine("Insert any the letter to convert to uppercase:"); string targetLetters = Console.ReadLine() ?? string.Empty; // 把目标字母统一转大写存入集合,方便快速匹配 HashSet<char> upperTargets = new HashSet<char>(targetLetters.ToUpper().ToCharArray()); char[] nameChars = name.ToCharArray(); for (int i = 0; i < nameChars.Length; i++) { // 只要当前字符的大写形式在目标集合中,就转大写 if (upperTargets.Contains(char.ToUpper(nameChars[i]))) { nameChars[i] = char.ToUpper(nameChars[i]); } } // 输出结果 Console.WriteLine(new string(nameChars));
运行效果验证
输入:
Insert your name: john Insert any the letter to convert to uppercase: jn
输出:
JohN
完全符合需求的功能要求。
内容的提问来源于stack exchange,提问作者Chris Van Gewden
相关产品推荐
相关产品推荐

