You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

C#中按字符串指定位置取ASCII字符并偏移的实现问题

解决C#中字符ASCII偏移并拼接新字符串的问题

我来帮你看看这段代码里的问题,你想要实现的其实是类似凯撒密码的字符偏移功能——把字符串每个字符的ASCII值加上指定偏移量,再拼接成新字符串对吧?先拆解下现有代码里的几个关键错误:

  • 循环条件错误:你的for循环写的是i == Str.Length - 1,这意味着循环只会在i等于字符串最后一个索引时执行一次,完全遍历不了整个字符串,应该改成i < Str.Length才能逐个处理每个字符。
  • 字符处理冗余且易出错:你用Encoding.ASCII.GetBytes(Str[index: i])来获取字符的字节,其实直接取Str[i]就能拿到对应的char,而且char本身可以直接参与整数运算(会自动转成对应的ASCII值)。
  • 字符串拼接逻辑错误:每次循环你直接把结果赋值给StrEnd,这会覆盖之前的内容,最后只会保留最后一个字符的处理结果,应该用+=来追加,或者用StringBuilder来提升性能(字符串是不可变类型,频繁+=会产生额外开销)。
  • 类型转换遗漏括号:你写的(char)Encoding.ASCII.GetBytes(Str[index: i]) + Clave,这里的强制转换只作用于字节数组的结果,应该把字符值+偏移量整体用括号包起来再转成char

修正后的完整代码

// 获取输入内容
string Str = txtStr.Text;
int Clave = Convert.ToInt32(txtCv.Text);
string StrEnd = string.Empty;

// 遍历字符串每个字符
for (int i = 0; i < Str.Length; i++)
{
    // 计算偏移后的字符:原字符ASCII值 + 偏移量,再转成char
    char shiftedChar = (char)(Str[i] + Clave);
    // 追加到结果字符串
    StrEnd += shiftedChar;
}

// 如果追求更高性能,推荐用StringBuilder:
// StringBuilder sb = new StringBuilder();
// foreach (char c in Str)
// {
//     sb.Append((char)(c + Clave));
// }
// string StrEnd = sb.ToString();

测试示例验证

  • Str = "ABC"Clave = 1时:
    A(65)+1=66→BB(66)+1=67→CC(67)+1=68→D,最终StrEndBCD,符合你的期望。
  • Str = "Hola"Clave = 2时:
    H(72)+2=74→Jo(111)+2=113→ql(108)+2=110→na(97)+2=99→c,最终StrEndJqnc,完全匹配需求。

内容的提问来源于stack exchange,提问作者Facundo Labonia

火山引擎 最新活动