将两个字符串连接到文本框中

时间:2017-11-16 07:06:53

标签: c# windows-forms-designer

我一直在学习密码学的基础知识,我想给予 其中一种称为之字形换位的方法  所有这个方法都是将整个句子组合起来,并从零开始给它们索引 然后它将偶数索引字符分成数组,将奇数字符分成不同的数组 当我将两个数组转换为字符串然后将它们放在文本框中时,只显示第一个字符串。

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 个答案:

答案 0 :(得分:4)

问题在于char数组的大小。我通过<br/>

解决了这个问题
char[] even = new char[whole.Length/2]; 
char[] odd = new char[whole.Length/2];

答案 1 :(得分:2)

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

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();

答案 2 :(得分:1)

使用StringBuilder类是更优雅的方法,而不是创建String的2个实例。

实施:DotnetFiddler