C# 对字符串中的字符进行加法和减法

标签 c# .net

我正在读取文本文件并尝试用新字符替换所有字符。根据我读到的字符,我想加 13 或减去 13。我的问题是,一旦我将 'a' 更改为 'n',当我到达 'n' 并尝试减去时,它会变回 'a'。例如,所有“a”都应该是“n”,所有“n”都应该是“a”。

while ((inValue = inFile.ReadLine()) != null) {
    for (int letter = 'A'; letter < 'z'; letter++)
    {
        if (letter >= 'A' && letter <= 'M')
            inValue = inValue.Replace((char)letter, (char)    (letter + 13));
        else if (letter >= 'N' && letter <= 'Z')
            inValue = inValue.Replace((char)letter, (char)(letter - 13));
        else if (letter >= 'a' && letter <= 'm')
            inValue = inValue.Replace((char)letter, (char)(letter + 13));
        else if (letter >= 'n' && letter <= 'z')
            inValue = inValue.Replace((char)letter, (char)(letter - 13));
    }
}

最佳答案

您需要跟踪字符串中的哪个字符已更改,这样就不会再次更改它。更容易单步执行输入字符串中的每个字符并更改它 - 这样您就知道它只会更改一次。

while ((inValue = inFile.ReadLine()) != null) {
    // convert to StringBuilder because you can't change the characters within a string
    var sb = new StringBuilder(inValue); 
    for (int i = 0; i < inValue.Length; i++ )
    {
        char letter = sb[i];
        if (letter >= 'A' && letter <= 'M')
            sb[i] = (char)(letter + 13);

        else if (letter >= 'N' && letter <= 'Z')
            sb[i] = (char)(letter - 13);

        else if (letter >= 'a' && letter <= 'm')
            sb[i] = (char)(letter + 13);

        else if (letter >= 'n' && letter <= 'z')
            sb[i] = (char)(letter - 13);
        }
    }
    inValue = sb.ToString(); // Convert back to string
    // ... ... ... do something with `inValue`
}

关于C# 对字符串中的字符进行加法和减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41009750/

相关文章:

.net - "Message"任务未找到

c# - PCL 程序集和读取资源文件

c# - 在后面的代码中,我如何使验证器不验证?

.net - 是否可以通过编程方式升级/降级到正在运行的ClickOnce应用程序的特定版本?

c# - 是否可以使用显式类型转换将基类对象分配给派生类引用?

c# - DropDownList SelectList SelectedValue 问题

c# - 从 asmx 服务返回多行

.net - VSTO Excel 2007 插件无法从网络共享安装

用于导出 SVN 文件夹的 C# 代码

C#/WPF : Make a GridViewColumn Visible=false?