Ravindra_IND Ответов: 1

Расшифруйте число строк в алфавите на C#


Dear All,
I want to convert number string entered in a textbox into integer array, and later on getting alphabet according index value of character array, and value of integer array.
Although, by using lambda expression, I can easily achieve that. But I want to achieve the same without lambda expression, and alternative regular expression for the same. 
Note:- In given below code, without lambda expression, if I enter “0AB12”, then it will print AABBC, instead of I want to ignore alphabet, and just want to decode in integer. While with lambda expression, it gives me perfect answer- ABC

Please help, it was asked me in a recent interview as a fresher.

protected void btn_Decode_Click(object sender, EventArgs e)
    {
        char[] arr = new char[] {'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 result = string.Empty;
        //string input = '0231';
        var myString = txt_Number.Text;
        int myInt;
        int[] num_arr = new int[myString.Length];
        for (int i = 0; i <myString.Length; i++)
        {
             if (int.TryParse(myString.Substring(i,1),out myInt))
            {
              num_arr[i] = int.Parse(myString.Substring(i, 1));
            }
            

        }
        //int myInt;


        //var num_arr = myString.ToCharArray().Where(x => int.TryParse(x.ToString(), out myInt)).Select(x => int.Parse(x.ToString())).ToArray();
        //int[] num_arr = new int[] { 0, 2, 3, 1 };


        for (int i = 0; i < num_arr.Length; i++)
        {
            result = result + arr[num_arr[i]];
        }

        Response.Write(result); 

    }


Что я уже пробовал:

protected void btn_Decode_Click(object sender, EventArgs e)
    {
        char[] arr = new char[] {'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 result = string.Empty;
        //string input = '0231';
        var myString = txt_Number.Text;
        int myInt;
        int[] num_arr = new int[myString.Length];
        for (int i = 0; i <myString.Length; i++)
        {
             if (int.TryParse(myString.Substring(i,1),out myInt))
            {
              num_arr[i] = int.Parse(myString.Substring(i, 1));
            }
            

        }
        //int myInt;


        //var num_arr = myString.ToCharArray().Where(x => int.TryParse(x.ToString(), out myInt)).Select(x => int.Parse(x.ToString())).ToArray();
        //int[] num_arr = new int[] { 0, 2, 3, 1 };


        for (int i = 0; i < num_arr.Length; i++)
        {
            result = result + arr[num_arr[i]];
        }

        Response.Write(result); 

    }

1 Ответов

Рейтинг:
0

OriginalGriff

В принципе, то, что вы делаете, не сработает: даже ваша лямбда-версия потерпит неудачу.
Попробуйте вот что: введите "числовую строку", которая будет генерировать весь алфавит, и обработайте ее, чтобы сгенерировать строку.
Вы получите не весь алфавит: все, что вы получите, это «ABCDEFGHIJBABBBCBD ...», потому что ваш код ожидает, что каждое число будет «закодировано» одним символом, а один символ не может содержать число, которое переводится как «10». "или любое другое значение выше этого. Поэтому, когда вы скармливаете ему «0123456789101112 ...», «1» из «10» интерпретируется как «B», а «0» как «A» вместо интерпретации пары как «K» - и если вы либо меняете на ввод фиксированного размера, чтобы каждое значение всегда принимало два символа, расширяете диапазон значений до Base 26, и в этом случае int.Parse не работает, либо добавляете разделитель между каждым «числом», вы не можете заставить это работать.


Ravindra_IND

Дорогой,
Лямбда-выражение дает 100% результат в этом случае, вы можете попробовать мой код. Это работает.

OriginalGriff

Я сделал. Это не... Попробуйте его с "0123456789101112 "и посмотрите, даст ли он вам" ABCDEFGHIJKLM"...

Ravindra_IND

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

OriginalGriff

Нет, потому что вся ваша идея ошибочна. Вам нужно переосмыслить то, что вы делаете, прежде чем спешить с изменением кода, который придется переписать, когда вы исправите фундаментальные проблемы.

Ravindra_IND

ОК.- Я понял твою точку зрения. Спасибо...но, пожалуйста, пожалуйста, поделитесь со мной любым рабочим кодом для этого........

OriginalGriff

Серьезно: мы не можем. Вам нужно решить фундаментальную проблему, заключающуюся в том, что то, что вы вводите, вообще не может генерировать Альфа - символы больше, чем "J" - совершенно бессмысленно пытаться "исправить" код, который никогда не будет выполнять эту работу должным образом! Это все равно что сделать полный сервис и установить четыре новые шины на свой автомобиль, а затем отбуксировать его к торговцу металлоломом для переработки! :смеяться:

Ravindra_IND

Вы правы...но что делать в ситуации, когда пыщо интервьюер задаст такой вопрос..Мне задали тот же вопрос, но я не мог этого сделать.....

OriginalGriff

Вы не могли бы преобразовать тривиальный бит Linq в циклы? Это не "психоинтервьюер" - это кто-то, кто пытается отсеять тех, кто не знает достаточно, чтобы выполнить эту работу.
Давай - это достаточно просто, попробуй!

- Я? Я бы указал на то, что он не работает должным образом, а не исправлял его...: смех:

Ravindra_IND

Прекрасная работа...