将两个字符串连接成一个文本框

4

我刚刚学习了一些有关密码学的基础知识,想试试其中一种方法,叫做锯齿置换
这种方法的作用是将整个句子组合起来,并从零开始给它们编号。然后,将偶数索引字符分成一个数组,将奇数索引字符分成另一个数组。
当我将这两个数组转换为字符串并放入文本框中时,只有第一个字符串显示出来。

private void ZigzagBu_Click(object sender, EventArgs e) {
    string s = PlaintextTB.Text;
    s = s.Replace(" ","");

    char[] whole = s.ToCharArray();
    char[] even = new char[whole.Length];
    char[] odd = new char[whole.Length];

    int evenIndex = 0;
    int oddIndex = 0;

    for(int i =0;i<whole.Length;i++) {
        if (i % 2 == 0) {
            even[evenIndex] = whole[i];
            evenIndex++;
        }
        else {
            odd[oddIndex] = whole[i];
            oddIndex++;
        }
    }

    s = new String(even);
    string m = new String(odd);

    CiphertextTB.Text = s+m;
}
3个回答

4
问题在于 char 数组的大小。我通过 <br/> 解决了这个问题。
char[] even = new char[whole.Length/2]; 
char[] odd = new char[whole.Length/2];

它在末尾被赋予了空字符。啊,我忘记了字符数组的美妙之处。 - Skeptical Ant

2

实际上,你的代码过于复杂。 同样的事情可以用简单的字符串完成,不需要转换为字符数组:

var s = "0123456";
var even = "";
var odd = "";
for(int i=0; i<s.Length;i++)
{
    if(i % 2 == 0)
    {
        even  += s[i];
    }
    else
    {
        odd += s[i];
    }
}
var result = even + odd;

然而,如果你的纯文本字符串稍微长一点(比如说10、20个字符)——更好的实现方式是使用StringBuilder

var s = "0123456";
var even = new StringBuilder();
var odd = StringBuilder();
for(int i=0; i<s.Length;i++)
{
    if(i % 2 == 0)
    {
        even.Append(s[i]);
    }
    else
    {
        oddAppend(s[i]);
    }
}
var result = even.Append(odd.ToString()).ToString();

@Arey 很高兴能帮忙 :-) - Zohar Peled

1
使用 StringBuilder 类是一种更优雅的方法,而不是创建 2 个 String 实例。
实现:DotnetFiddler

确实如此。 - Skeptical Ant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接