Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение результата из двух переменных

56K
12 октября 2012 года
game777
11 / / 29.05.2010
У меня проблема с щифрованием текста, которое в принципе производится по таблице, где букве соответствует число, а для некоторых сочетаний отдельно число выделено, как например для CON=55.(а А = 1). Вот допустим ввожу слово "acon", проверяю сначала наличие слогов:

 
Код:
string result = "";
string text = textBox2.Text;
text=text.Replace("con", "55");
text = text.Replace("et", "8");
А потом иду просто по отдельным буквам так:

Код:
for (int i = 0; i < text.Length; i++)
            {
                string letter = text[i].ToString();
                foreach (DataGridViewColumn column in dataGridView1.Columns)
                {
                    if (column.HeaderText == letter)
                    {
                        string cellValue = dataGridView1.CurrentRow.Cells[column.Index].Value.ToString();
                        var values = cellValue.Split(' ');
                        int index = rnd.Next(values.Length);
                        result += values[index];
                    }
                }
            }
            listBox1.Items.Add(result);
Никак не пойму, как выполнить слияние этих переменных, чтобы в итоге вывелось "155", подскажите...
360
12 октября 2012 года
P*t*
474 / / 15.02.2007
1) Вот так писать нельзя:

 
Код:
text=text.Replace("con", "55");
text = text.Replace("et", "8");
Дело в том, что твои цифры 55 потом обработаются повторно, если окажутся в списке преобразуемых символов.

2) Как-то уж слишком страшно выглядит код. Возможно вам стоит посмотреть, что такое Dictionary и перегнать туда "словарь" заменяемых слов.
Несколько дико выглядит ToString() для отдельного символа. Символы можно сравнивать и без конвертации в строку.

3) Я так и не понял, что и куда требуется сливать. result - это ведь строковая переменная? Запись "result +=" как раз будет добавлять к ней требуемое значение. Что нужно то?
56K
12 октября 2012 года
game777
11 / / 29.05.2010
Цитата: P*t*
1) Вот так писать нельзя:

 
Код:
text=text.Replace("con", "55");
text = text.Replace("et", "8");
Дело в том, что твои цифры 55 потом обработаются повторно, если окажутся в списке преобразуемых символов.

2) Как-то уж слишком страшно выглядит код. Возможно вам стоит посмотреть, что такое Dictionary и перегнать туда "словарь" заменяемых слов.
Несколько дико выглядит ToString() для отдельного символа. Символы можно сравнивать и без конвертации в строку.

3) Я так и не понял, что и куда требуется сливать. result - это ведь строковая переменная? Запись "result +=" как раз будет добавлять к ней требуемое значение. Что нужно то?



В общем нужно как-то сделать так, чтобы сочетание букв, для которого есть отдельный символ, кодировалось именно им. А в foreach это не делается, не понимает столбец DataGrig сочетание букв, как единое целое и работает этот цикл только для букв, а не слогов. Т.е. если я напишу "acon", то мне зашифруется каждая буква из четырех, а не буква и слог. Вот и не знаю как это решить, думал что сначала зашифровать слоги, если таковые есть, а потом перейти в цикл к буквам. Помогите пожалуйста)

360
12 октября 2012 года
P*t*
474 / / 15.02.2007
Ну например что-нибудь такое:

Код:
Dictionary<string, int> dict = new Dictionary<string, int>()
{
        {"con", 55},
        {"et", 8},
        {"a", 1},
};

string input = "acon";
string answer = "";

while (input.Length > 0) {
        foreach (var pair in dict)
    {
       if (input.StartsWith(pair.Key)) {
               answer += pair.Value;
               input = input.SubString(pair.Key.Length, input.Length-pair.Key.Length);
               break;
           }
    }
}
C# я не люблю, так что скорее всего сходу это не заработает и нужно будет что-нибудь исправить.

P.S чуть исправил
56K
12 октября 2012 года
game777
11 / / 29.05.2010
Цитата: P*t*
Ну например что-нибудь такое:

Код:
Dictionary<string, string> dict = new Dictionary<string, int>()
{
        {"con", 55},
        {"et", 8},
        {"a", 1},
};

string input = "acon";
string answer = "";

while (input.size() > 0) {
        foreach (var pair in dict)
    {
       if (input.StartsWith(pair.Key)) {
               answer += pair.Value;
               input = input.SubString(pair.Value.size(), input.size()-pair.Value.size());
               break;
           }
    }
}
C# я не люблю, так что скорее всего сходу это не заработает и нужно будет что-нибудь исправить.


да, что-то много незнакомого, ну я попробую, спасибо! А это все делается перед for?

360
12 октября 2012 года
P*t*
474 / / 15.02.2007
Dictionary - это ассоциативный массив.

Основная его функциональность в моем примере не используется, но это определенно лучше, чем при обработке каждого следующего символа заного доставать значения откуда-то из недр графического интерфейса (DataGridViewColumn)
56K
12 октября 2012 года
game777
11 / / 29.05.2010
А что-то он у меня все ругается вот здесь: text2 = text2.Substring(pair.Value, text2.Length-pair.Value); Типа startIndex не может быть больше, чем длина строки.
360
12 октября 2012 года
P*t*
474 / / 15.02.2007
Цитата: game777
А что-то он у меня все ругается вот здесь: text2 = text2.Substring(pair.Value, text2.Length-pair.Value); Типа startIndex не может быть больше, чем длина строки.



pair.Value исправь на pair.Key.Length

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог