Zamiana liter na cyfry

0

Witam
Mam sobie oto taki ciąg znaków generowany w kontrolce textbox z automatu: 3gMXtRnFL4
Znaki w kontrolce textbox się zmieniają na duże i małe.
chciałbym teraz zrobić zamianę tych znaków na cyfry

mam zadeklarowane takie coś:

char[] znaki = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'q', 'o', 'p', 'r', 's', 't', 'u', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Q', 'O', 'P', 'R', 'S', 'T', 'U', 'W', 'X', 'Y', 'Z' };
                    int[] liczby = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50};

Teraz pytanie jak zamienić ów ciąg na zadeklarowane cyfry i zwrócić w jednym ciągu wszystkie cyfry odpowiadające każdemu znakowi w jednym ciągu ?
np: 37384820431431374

0

Łatwej Ci będzie zrobić sobie słownik coś takiego Dictionary<int, char> przechowywać tam klucz i wartość no i np sobie pętla odczytasz for(int i; I < div.count; i++) zmienna = dict[i];

1

Jeżeli każda liczba w tablicy liczby ma taką wartość, jak index odpowiadającego jej elementu w tablicy znaki powiększony o 1, tak jak w Twoim przypadku, to możesz użyć wyrażenia LINQ:

var convertedString = string.Join("", originalString.Select(x => 
    znaki.Contains(x) ? (Array.IndexOf(znaki, x) + 1).ToString() : x.ToString()));

Jeżeli pomyliłeś się we wpisywaniu alfabetu i tablica znaki powinna zawierać wszystkie małe i duże litery w kolejności występowania ich w angielskim alfabecie, to będzie jeszcze prościej.

0

Bez zera? Nie da się!
No chyba że niezbyt dobrze rozumiem o co ci chodzi, może wyjaśnisz?

1

A nie możesz sobie zamienić tych liter na kody ASCII, potem tylko w pętli odejmujesz sobie od kodu ASCII startową wartość w zależności czy litery wielkie czy nie.
Np. dla "a" które ma wartość 97 odejmujesz 96 i masz 1 a dla "A" które ma wartość 65 odejmujesz 39 i masz 26.

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SysConv
{
    class Program
    {
        static string digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        static string strange = "abcdefghijklmnqoprstuwxyzABCDEFGHIJKLMNQOPRSTUWXYZ";
        static void Main(string[] args)
        {
            string front = "37384820431431374";
            string value = replacedigits(front, digits, strange);
            string encoded = sysconv(10, strange.Length, strange, value);
            string decoded = sysconv(strange.Length, 10, strange, encoded);
            string back = replacedigits(decoded, strange, digits);

            Console.WriteLine(front);
            Console.WriteLine(value);
            Console.WriteLine(encoded);
            Console.WriteLine(decoded);
            Console.WriteLine(back);

            Console.ReadLine();
        }
        static string replacedigits(string value, string olddig, string newdig)
        {
            char[] ret = new char[value.Length];
            for (int i = 0; i < ret.Length; ++i) ret[i] = newdig[olddig.IndexOf(value[i])];
            return new string(ret);
        }
        static string sysconv(int sysin, int sysout, string digits, string sin)
        {
            char[] sout = new char[(int)Math.Ceiling((sin.Length + 1) * Math.Log(sysin, sysout))];
            sout[0] = digits[0];
            int end = 1;
            for (int pin = 0; pin < sin.Length; ++pin)
            {
                long p = digits.IndexOf(sin[pin]);
                for (int pos = 0; pos < end; ++pos)
                {
                    long m = p + digits.IndexOf(sout[pos]) * sysin;
                    sout[pos] = digits[(int)(m - (p = m / sysout) * sysout)];
                }
                for (long m = p; p > 0; m = p) sout[end++] = digits[(int)(m - (p = m / sysout) * sysout)];
            }
            Array.Reverse(sout);
            return new string(sout).Substring(sout.Length - end);
        }
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1