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]);
            }

        }

    }
}

しかし、それはアスキーに取って代わるものではありません。助けてください。

4

2 に答える 2

3

結果を元の変数とは異なる変数に書き込んでいるため、最後の文字のみが置き換えられます。同じボックスに書き込むか、一時文字列に書き込んで、最後の2番目のボックスに書き込む必要があります。

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

一般的に、これは不変の文字列で動作するため、置換を行うための最も効率的なアルゴリズムではありません。可変文字列ビルダーを作成し、一度に1文字ずつ書き込む方がよいでしょう。

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が、前の状態は保存しないため、最後のループ反復のみを実行します

于 2012-07-15T18:02:30.133 に答える