我正在从文本文件中读取并尝试用新文件替换所有字符。根据我读到的字符,我想添加13或减去13.我的问题是,一旦我将'a'改为'n',当我到'n'并尝试减去时它会变回'a'。例如,'a'应为'n',所有'n'应为'a'。
<embed>
答案 0 :(得分:2)
您需要跟踪字符串中的哪个字符已被更改,因此您不会再次更改它。更容易逐步浏览输入字符串中的每个字符并进行更改 - 这样您就知道它只会更改一次。
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`
}
答案 1 :(得分:0)
这是因为当你还在for循环中时你正在改变它们。跟踪需要更换的每个字符的索引以及需要去的内容。循环结束后,继续循环包含
的Dictionaryint:index; char:replacementChar。
这些内容如下:
for (int letter = 'A'; letter < 'z'; letter++)
{
var charTracker = new Dictionary<int, char>();
char replacement;
if (letter >= 'A' && letter <= 'M')
replacement = (char)(letter-13);
else if (letter >= 'N' && letter <= 'Z')
replacement = (char)(letter-13));
else if (letter >= 'a' && letter <= 'm')
replacement = (char)(letter + 13));
else if (letter >= 'n' && letter <= 'z')
replacement = (char)(letter - 13));
charTracker.Add(letter, replacement);
}
for(var i = 0; i < charTracker.Length -1; i++)
{
// Logic to replace chars here
}