Как изменить все символы в строке с номерами в C #? - PullRequest
1 голос
/ 14 января 2012

я хочу изменить символы с числами, например: a с 1, b с 2 ... z с 26. поэтому строка "привет" будет выглядеть примерно так: 82491513621. Первый вопрос: как это сделать это проще всего, и второе: как это сделать с помощью оператора SWITCH. я попробовал это, но после перерыва; это останавливается. спасибо.

Ответы [ 3 ]

2 голосов
/ 14 января 2012

Тебе нужен цикл, что бы ты ни делал. Простого переключателя недостаточно.

string input = "hello";
StringBuilder output = new StringBuilder();
foreach(char c in input)
{
   output.Append((c - 'a' + 1));
}

Console.WriteLine(output);

Некоторое объяснение: поскольку все буквы имеют числовой код ASCII, связанный в алфавитном порядке, это означает, что из любого символа, представляющего букву, мы можем вычесть «a» и добавить 1, чтобы получить его числовой ранг в алфавите.

Если использование оператора switch является абсолютным требованием, вам нужно будет написать отдельный регистр для каждого возможного значения символа:

string input = "hello";
StringBuilder output = new StringBuilder();
foreach(char c in input)
{
    switch(c)
    {
        case 'a': output.Append("1"); break;
        case 'b': output.Append("2"); break;
        // etc.
        case 'z': output.Append("26"); break;
    }             
}

Console.WriteLine(output);
0 голосов
/ 14 января 2012

Вы можете определить функцию как:

int transform(char ch)
{
}

Это может быть реализовано с использованием словаря:

Dictionary<char, int> map;  
map['a'] = 1;
map['b'] = 2;
...
return map[ch];

или используйте переключатель, как вы упомянули:

switch(ch)
{
   case 'a': return 1;
   case 'b': return 2;
   ....
}

Теперь функция готова, вы можете просто пройтись по вашей строке и вызвать transform для каждого символа.

0 голосов
/ 14 января 2012

Следующие фрагменты кода основаны на представлении букв ASCII .

  • A представлено значением 65
  • B представленозначение 66
  • ... и т. д.

Из массива символов:

char[] letters = { 'A', 'B', 'C', 'D' };
int[] numbers = new int[4];

for (int i = 0; i < 4; i++)
{
    numbers[i] = Convert.ToByte(letters[i], CultureInfo.InvariantCulture) - 64;
}

Альтернативный способ:

string myString = "HELLO";
StringBuilder stringAsNumbers = new StringBuilder();

for (int i = 0; i < myString.Length; i++)
{
    stringAsNumbers.Append(Convert.ToByte(myString[i], CultureInfo.InvariantCulture) - 64);
}

Позаботьтесь очувствительность к регистру.Приведенный выше код работает только в верхнем регистре, так как 65 - это код ASCII для «A» (не «a»).

Не пытайтесь использовать оператор switch, это будет выглядеть ужасно.

РЕДАКТИРОВАТЬ: Если вы действительно хотите оператор switch, вот оно:

string myString = "AAB";
StringBuilder stringAsNumbers = new StringBuilder();

for (int i = 0; i < myString.Length; i++)
{
    switch (myString[i])
    {
        case 'A':
        case 'a':
            stringAsNumbers.Append("1");
            break;
        case 'B':
        case 'b':
            stringAsNumbers.Append("2");
            break;
        ...
    }
}

EDIT: Чтобы получить окончательный string для StringBuilder, используйте stringAsNumbers.ToString();

...