You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:24:03