0

我试图在这个程序中用 ascii 文本替换普通文本:

所以a将被替换为â&ETC。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TextConverter
{
    public partial class TextCoverter : Form
    {
        public TextCoverter()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] normal = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
            string[] ascii = { "â", "ß", "ç", "ð", "è", "ƒ", "ģ", "н", "ι", "j", "ќ", "ļ", "м", "и", "ю", "ρ", "Ω", "ѓ", "$", "τ", "ט", "Λ", "ш", "χ", "У", "ź" };


            for (int i = 0;  i < 26; i++)
            {
                textBox2.Text = textBox1.Text.Replace(normal[i], ascii[i]);
            }

        }

    }
}

但它不能用 Ascii 代替。请帮忙。

4

2 回答 2

3

由于您将结果写入与原始变量不同的变量中,因此仅替换最后一个字母。您应该写入同一个框,或写入临时字符串,然后将其写入最后的第二个框。

var tmp = textBox1.Text;
for (int i = 0;  i < 26; i++)
{
    tmp = tmp.Replace(normal[i], ascii[i]);
}
textBox2.Text = tmp;

一般来说,这不是进行替换的最有效算法,因为它对不可变字符串进行操作。您最好创建一个可变字符串构建器,并一次写入一个字符。

const string repl = "âßçðèƒģнιjќļмиюρΩѓ$τטΛшχУź";
var res = new StringBuilder();
foreach (char c in textBox1.Text) {
    if (c >= 'a' && c <= 'z') {
        res.Append(repl[c-'a']);
    } else {
        res.Append(c);
    }
}
textBox2.Text = res.ToString();
于 2012-07-15T18:01:17.857 回答
0

textBox2.Text = textBox1.Text.Replace(normal[i], ascii[i]);textBox1您一次又一次地 更换,但不保存 previos 状态,所以只工作最后一次循环迭代

于 2012-07-15T18:02:30.133 回答