我正在读取文本文件并尝试用新字符替换所有字符。根据我读到的字符,我想加 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/