c#防止覆盖文本字段
本文关键字:文本 字段 覆盖 | 更新日期: 2023-09-27 18:17:39
我在c#中有这个代码,但是在块内移动的代码覆盖了移动d
字母的代码。我怎样才能解决这个问题,使它们不再相互覆盖?这是代码:
private void Crypt(int n, int m, int d)
{
// make a block from the string
string invoerstring = invoer.Text;
uitvoer.Text = invoerstring;
// shift d letters
char[] buffer = invoerstring.ToCharArray();
for (int i = 0; i < buffer.Length; i++)
{
// Letter.
char letter = buffer[i];
// Add shift to all.
letter = (char)(letter + d);
// Subtract 26 on overflow.
// Add 26 on underflow.
if (letter > 'z')
{
letter = (char)(letter - 26);
}
else if (letter < 'a')
{
letter = (char)(letter + 26);
}
// Store.
buffer[i] = letter;
}
uitvoer.Text+=buffer;
//shift characters inside a block
var shift = String.Concat(invoerstring.Skip(m).Concat(invoerstring.Take(m)));
uitvoer.Text = shift;
}
private void button1_Click(object sender, EventArgs e)
{
Crypt(8,2,1);
}
几点提示:
- 你的代码正在修改控件
- 我是否正确,参数
n
从未使用?
Uitvoer
。试着强制阻止这种情况。将ui代码(修改ui组件)与逻辑(加密某些内容)分开。它认为只有这个提示你应该成功,因为现在你正试图写回你的结果到早期。你自己说的:第二个操作会覆盖第一个操作的结果。移动一个块的行使用invoerstring
,但invoerstring
没有被移动字母的代码以任何方式修改。您应该使用最后一次操作的结果:buffer
.试试这个:
private string Crypt(string input, int m, int d)
{
string result = "";
foreach(char ch in input)
{
// Add shift to all.
char letter = (char)(ch + d);
// Subtract 26 on overflow.
// Add 26 on underflow.
if (letter > 'z')
{
letter = (char)(letter - 26);
}
else if (letter < 'a')
{
letter = (char)(letter + 26);
}
// Store.
result += letter;
}
//shift characters inside a block
result = result.Substring(m) + result.Substring(0, m);
return result;
}
private void button1_Click(object sender, EventArgs e)
{
uitvoer.Text = Crypt(invoer.Text, 2, 1);
}
如果您希望同时显示块移位和字符移位:在最后一行添加+
:
result += result.Substring(m) + result.Substring(0, m);
您正在使用uitvoer.Text+=buffer;
,我认为这是问题所在。字符数组的类型被赋值为text 'System '。Char[]"。
下面修改后的代码将每个字符替换为下一个第d个字符(因此'a'被'b'替换),然后将字符向左旋转m个字符。
。输入'abcde'给出m = 2和d = 1的o/p 'defbc'[abcde -> bcdef(替换为下一个字符)-> defbc(左移2)]
private static void Crypt(int n, int m, int d)
{
// make a block from the string
string invoerstring = invoer.Text;
string uitv = "";
// shift d letters
char[] buffer = invoerstring.ToCharArray();
for (int i = 0; i < buffer.Length; i++)
{
// Letter.
char letter = buffer[i];
// Add shift to all.
letter = (char)(letter + d);
// Subtract 26 on overflow.
// Add 26 on underflow.
if (letter > 'z')
{
letter = (char)(letter - 26);
}
else if (letter < 'a')
{
letter = (char)(letter + 26);
}
// Store.
buffer[i] = letter;
uitv += letter;
}
//shift characters inside a block
var shift = String.Concat(uitv.Skip(m).Concat(uitv.Take(m)));
uitv = shift;
uitvoer.Text = uitv;
}