0

次の2つの文字列配列があります。

string[] abecele = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "w", "x", "y", "z", ".", ",", "!", "?", "(", ")", "@", " " };
string[] keitiniai = { "714", "741", "147", "471", "417", "174", "789", "798", "897", "978", "879", "987", "123", "321", "132", "312", "213", "231", "852", "258", "825", "285", "582", "528", "951", "159", "915", "195", "519", "591", "753", "357", "000" };

次にtekstas、 からランダム テキストを取得するという名前の文字列がありますmaskedTextBox: tekstas = maskedTextBox1.Text

ここで、abecele[]配列 IN THAT TEXT にある文字を keitiniai 配列の値に変更する必要があります。たとえば、tekstas 文字列に「abc」というテキストがある場合は、 になり714741147ます。

そのようなコードを使用してそれを実装します:

for (i = 0; i < 32; i++)
{
    string raide = abecele[i];
    string keitinys = keitiniai[i];
    string pakeistas = tekstas.Replace(raide, keitinys);
}

でも、思い通りに交換したはずの新しい弦のパケスタが交換されていません。問題はどこだ?

4

4 に答える 4

4

代わりに使用しDictionary<Char, String>ます:

IDictionary<char, string> lookup = new Dictionary<char, string> {
    {'a', "714"},
    {'b', "741"},
    {'c', "147"},
    //...
};
StringBuilder resultBuilder = new StringBuilder();
foreach(char c in tekstas) {
    string code;
    if(lookup.TryGetValue(c, out code))
        resultBuilder.Append(code);
}
string result = resultBuilder.ToString();
于 2012-05-30T08:51:48.127 に答える
4

現時点では、毎回「replacements made」文字列を破棄しています。おそらく次のものが必要です。

string pakeistas = tekstas;
for (i = 0; i < 32; i++)
{
    string raide = abecele[i];
    string keitinys = keitiniai[i];
    pakeistas = pakeistas.Replace(raide, keitinys);
}

// Use pakeistas for whatever.
于 2012-05-30T08:42:39.070 に答える
2

新しく変更された文字列 pakeistas は何度も上書きされ、for ループの間だけ存在します。

于 2012-05-30T08:42:52.147 に答える
1

これらの 2 つの配列を使用する代わりに、Dictionary にキー、アルファベット、値を整数値として使用してから、StringBuilder を使用して文字列を作成することができますabc714741147

Dictionary<string, string> myDictionary = new Dictionary<string, string>();
myDictionary.Add("a", "714");
myDictionary.Add("b", "741");
myDictionary.Add("c", "147");
//and so on ...
string tekstas = "abc";
StringBuilder sb = new StringBuilder();
foreach(char c in tekstas)
       {
         string key = c.ToString();
         sb.Append(myDictionary[key]);
         }
var  pakeistas = sb.ToString();
于 2012-05-30T08:53:16.057 に答える