0 / 0 / 0
Регистрация: 15.08.2012
Сообщений: 26
1

Перевод кода придуманной кодировки в латинские буквы

15.08.2012, 22:13. Показов 2505. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, товарищи.

Сейчас будет дико запутанная история.

Дело вот в чем: есть придуманная кодировка, если ввести её коды в текстбокс, то коды преобразуются в соответствующие символы латинского алфавита. Но суть проблемы даже не в этом. Есть кусок кода:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void button2_Click(object sender, EventArgs e)
        {
            if (textBox2.Text == string.Empty)
                MessageBox.Show("Введите текст для шифрования");
            else
            {
 
                string i = textBox2.Text;
                textBox2.Text = string.Empty;
                
                {
                    //ABC - это string[] ABC = { "A", "B", ...
                    if (i == "00011") textBox2.Text += ABC[0] + " "; //a
                    if (i == "11001") textBox2.Text += ABC[1] + " "; //b
                    if (i == "01110") textBox2.Text += ABC[2] + " "; //c
                    if (i == " ") textBox2.Text += "#" + " "; //импровизированный пробел
                }
Но программа выводит символы только по одному, т.е. если я ввожу, например, "00011 11001", ничего не выдается, а если только "00011", то преспокойно выдает "А". Ну и, уважаемые знатоки, внимание, вопрос: как сделать так, чтоб переводил всё написанное, а не по одному?
Ткните, если что-то не понятно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2012, 22:13
Ответы с готовыми решениями:

Перевод восьмибитного кода в символьный, кодировки ASCII
Доброе время. подскажи пожалуйста как можно перевести 8-ми битный код в символьный, кодировки...

Перевод двоичного кода в буквы ASCII
Ребят такой вопрос: как перевести двоичный код в букву ASCII. Пробовал Convert.ToInt32(value, 2),...

Перевод кода кириллицы юникода в буквы.
Допустим как перевести строку с таким вот кодом a="\u0410\u0410\u0410" в буковки? Собственно вот...

Дана строка, содержащая цифры и строчные латинские буквы. Если буквы в строке упорядочены по алфавиту, то вывести 0; в п
Дана строка, содержащая цифры и строчные латинские буквы. Если буквы в строке упорядочены по...

13
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
15.08.2012, 22:20 2
Используй String.Split - что бы разбить на куски,либо сам разбей,если куски одинаковой длины с одинаковым к-вом разделителей(то бишь 1 или 2).

+ замени if на switch.
C#
1
2
3
4
5
foreach(string s in mYStrings[])
switch(s)
{
 case "00011": /// логику в общем понял?
}
1
0 / 0 / 0
Регистрация: 15.08.2012
Сообщений: 26
15.08.2012, 23:49  [ТС] 3
Относительно понял, но теперь идут другие трудности.
Теперь код таков:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void button2_Click(object sender, EventArgs e)
        {
            if (textBox2.Text == string.Empty)
                MessageBox.Show("Введите текст для шифрования");
            else
            {               
                textBox2.Text = string.Empty;
                mYStrings[] = textBox2.Text.Split(' ');
                foreach(string s in mYStrings[])
                    switch (s)
                    {
                        case "00011": textBox2.Text += ABC[0] + " "; //a
                        case "11001": textBox2.Text += ABC[1] + " "; //b
                        case "01110": textBox2.Text += ABC[2] + " "; //c
                        // и так далее
В "foreach(string s in mYStrings[])" mYStrings[] выдает синтаксическую ошибку и требует значение,
а в mYStrings[] = textBox2.Text.Split(' '); требует идентификатор.
Мои неширокие познания не позволяют понять, в чем дело.
0
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
15.08.2012, 23:55 4
C#
1
2
mYStrings = textBox2.Text.Split(' ');
foreach(string s in mYStrings)
квадртаные скобки - долой
1
0 / 0 / 0
Регистрация: 15.08.2012
Сообщений: 26
16.08.2012, 00:24  [ТС] 5
Спасибо! Продвигаемся дальше. mYStrings - это, я так понимаю, то, откуда нужно брать буквы? Т.е. я могу заменить это на массив ABC с ними?
Если да, то дальше идут такие жуткие вещи: "Управление не может передаваться вниз от одной метки case к другой".
0
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
16.08.2012, 00:31 6
каждый case надо закрыть break'ом:

C#
1
case "00011": textBox2.Text += ABC[0] + " "; break;
В myString после Split'а будут коды а-ля "00011"
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
16.08.2012, 00:36 7
Цитата Сообщение от pleasekillme Посмотреть сообщение
"Управление не может передаваться вниз от одной метки case к другой".
после каждого case пишешь break.
mYStrings - это массив который вернула эта строка кода textBox2.Text.Split(' ');
(' '); - эта голова содержит разделитель,в данном случае пробел.
Все что между "разделителем" отсекается в отдельную строку,а потом формируется массив из этих строк

Не по теме:

Переименуй это(mYStrings ) Я писал все быстро,некрасиво и без компилятора :D



Добавлено через 3 минуты
Цитата Сообщение от pleasekillme Посмотреть сообщение
Т.е. я могу заменить это на массив ABC с ними?
Это,mYStrings ,если я правильно понял,и будет массив с твоими кодами
0
0 / 0 / 0
Регистрация: 15.08.2012
Сообщений: 26
16.08.2012, 14:25  [ТС] 8
Что-то я маленько запутался, либо вас запутал, немножко поясню на всякий случай. Вот есть у меня массив с буквами:
C#
1
2
3
string[] ABC = { "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",};
Собственно, оттуда берутся буквы для
C#
1
2
3
 
case "00011": textBox2.Text += ABC[0] + " "; break; //a
case "11001": textBox2.Text += ABC[1] + " "; break;//b
Пусть mYString будет myString, чтоб побыстрее; имеется ввиду, что из этого myString буквы должны браться? Но буквы у меня должны браться из ABC. Или этот массив надо как-то отдельно обозначить?
0
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
16.08.2012, 14:32 9
pleasekillme, сделай уже словарь проще будет.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dictionary<string,string> ABC = new Dictionary<string,string>()
{
  { "00011", "A" },
  { "11001", "B" },
  ...
}
 
// юзать так
foreach(string s in mYStrings)
{
  // лучше сначала проверить
  if( !ABC.ContainsKey(s) )
    continue;
 
  textBox2.Text += ABC[s] + " ";
}
 
// либо так
textBox2.Text += ABC["00011"] + " "; // добавили А
0
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
16.08.2012, 14:32 10
myString - это массив, который по сути представляет преобразованную строку, введенную в текст бокс, он содержит что-то вроде
("000111"
"011000"
"010101"...)

ABC - содержит реальные буквы

блок операторов case устанавливает правила состыковки между этими двумя массивами
0
0 / 0 / 0
Регистрация: 15.08.2012
Сообщений: 26
16.08.2012, 14:42  [ТС] 11
О, понял.
Теперь код такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private void button2_Click(object sender, EventArgs e)
        {
            if (textBox2.Text == string.Empty)
                MessageBox.Show("Введите текст для шифрования");
            else
            {         
                textBox2.Text = string.Empty;
                myString = textBox2.Text.Split(' ');
                foreach(string s in myString)
                    switch (s)
                    {
                        case "00011": textBox2.Text += ABC[0] + " "; break; //a
                        case "11001": textBox2.Text += ABC[1] + " "; break;//b
                        case "01110": textBox2.Text += ABC[2] + " "; break;//c
Так как myString "не существует в данном контексте", его нужно создать. Всплывающие подсказки говорят создать заглушку свойства или поля, но ни в том, ни в другом случае программа компилируется, но не работает. Или как-то по-другому?
0
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
16.08.2012, 14:47 12
pleasekillme,
C#
1
var myString = textBox2.Text.Split(' '); // fixed
но я бы делал со словарем.
1
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
16.08.2012, 14:49 13
C#
1
2
textBox2.Text = string.Empty;
                myString = textBox2.Text.Split(' ');
Вот здесь ты сначала обнуляешь текстбокс, а потом пытаешься уже обнуленный текстбокс разбить на составляющие ... непорядок-с

Добавлено через 1 минуту
Цитата Сообщение от Savvy Посмотреть сообщение

но я бы делал со словарем.
угу, было бы проще
1
0 / 0 / 0
Регистрация: 15.08.2012
Сообщений: 26
16.08.2012, 14:53  [ТС] 14
Awwwwyeah, поцоны, спасибо за помощь. Оно работает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2012, 14:53
Помогаю со студенческими работами здесь

Распознает только латинские буквы
Здравствуйте друзья!Скачал исходник с ангийского сайта распознование изображений только вот он...

Удалить в строке все латинские буквы
в введеннной строке удалить все латинские буквы.С# консольный Помогите,нужно очень срочно

Напечатать в обратном порядке латинские буквы, входящие в текст, заменяя маленькие латинские буквы большими
Дан текст — последовательность символов, возможно, пустая, за которой следует точка. Напеча- тать...

Расположить латинские буквы в начале строки, отсортированные по алфавиту, а русские буквы в конце
ПОЖАЛУЙСТА ПОМОГИТЕ блондинке:) раньше не было фортрана а перевелася на другой факультет и сразу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru