Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
4 / 4 / 1
Регистрация: 28.05.2013
Сообщений: 40
1

Работает не так как надо

18.06.2013, 15:18. Просмотров 813. Ответов 10
Метки нет (Все метки)

я ввожу ааа - выводит qqq
а должен выводить qaz
что нужно поменять?
хотя бы на примере первого цикла

C++
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
51
52
53
54
55
56
57
58
59
void tras::EncButtonClick()
{
 
QString text=txtA->text();
QString ar1[6]={tr("а"),tr("б"),tr("в"),tr("г"),tr("д"),tr("ж")};
QString ar2[6]={tr("q"),tr("w"),tr("e"),tr("r"),tr("t"),tr("y")};
QString ar3[6]={tr("a"),tr("s"),tr("d"),tr("f"),tr("g"),tr("h")};
QString ar4[6]={tr("z"),tr("x"),tr("c"),tr("v"),tr("b"),tr("n")};
QString ar5[6]={tr("й"),tr("ц"),tr("у"),tr("к"),tr("е"),tr("н")};
QString ar6[6]={tr("ф"),tr("ы"),tr("п"),tr("р"),tr("о"),tr("л")};
QString ar7[6]={tr("д"),tr("ш"),tr("з"),tr("щ"),tr("ю"),tr("я")};
QString r=txtA->text();
 
for (int i =0; i<6; i++) 
{
    text.replace(ar1[i], "~");
    text.replace(ar2[i],ar1[i]);
    text.replace("~",ar2[i]);
}
 
for (int i =1; i<6; i++) 
{
    text.replace(ar2[i], "№");
    text.replace(ar3[i],ar2[i]);
    text.replace("№",ar3[i]);
}
 
for (int i =2; i<6; i++) 
{
    text.replace(ar3[i], "$");
    text.replace(ar4[i],ar3[i]);
    text.replace("$",ar4[i]);
}
 
for (int i =3; i<6; i++) 
{
    text.replace(ar4[i], "%");
    text.replace(ar5[i],ar4[i]);
    text.replace("%",ar5[i]);
}
 
for (int i =4; i<6; i++) 
{
    text.replace(ar5[i], "*");
    text.replace(ar6[i],ar5[i]);
    text.replace("*",ar6[i]);
}
 
for (int i =5; i<6; i++) 
{
    text.replace(ar6[i], "@");
    text.replace(ar7[i],ar6[i]);
    text.replace("@",ar7[i]);
}
 
 
txtA->setText(text);
 
}
Добавлено через 9 минут
немного исправил.
C++
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
51
52
53
54
55
56
57
58
void tras::EncButtonClick()
{
 
QString text=txtA->text();
QString ar1[6]={tr("а"),tr("б"),tr("в"),tr("г"),tr("д"),tr("ж")};
QString ar2[6]={tr("q"),tr("w"),tr("e"),tr("r"),tr("t"),tr("y")};
QString ar3[6]={tr("a"),tr("s"),tr("d"),tr("f"),tr("g"),tr("h")};
QString ar4[6]={tr("z"),tr("x"),tr("c"),tr("v"),tr("b"),tr("n")};
QString ar5[6]={tr("й"),tr("ц"),tr("у"),tr("к"),tr("е"),tr("н")};
QString ar6[6]={tr("ф"),tr("ы"),tr("п"),tr("р"),tr("о"),tr("л")};
QString ar7[6]={tr("д"),tr("ш"),tr("з"),tr("щ"),tr("ю"),tr("я")};
 
for (int i =0; i<6; i++) 
{
    text.replace(ar1[i], "~");
    text.replace(ar2[i],ar1[i]);
    text.replace("~",ar2[i]);
}
 
for (int i =1; i<6; i++) 
{
    text.replace(ar1[i], "№");
    text.replace(ar3[i],ar1[i]);
    text.replace("№",ar3[i]);
}
 
for (int i =2; i<6; i++) 
{
    text.replace(ar1[i], "$");
    text.replace(ar4[i],ar1[i]);
    text.replace("$",ar4[i]);
}
 
for (int i =3; i<6; i++) 
{
    text.replace(ar1[i], "%");
    text.replace(ar5[i],ar1[i]);
    text.replace("%",ar5[i]);
}
 
for (int i =4; i<6; i++) 
{
    text.replace(ar1[i], "*");
    text.replace(ar6[i],ar1[i]);
    text.replace("*",ar6[i]);
}
 
for (int i =5; i<6; i++) 
{
    text.replace(ar1[i], "@");
    text.replace(ar7[i],ar1[i]);
    text.replace("@",ar7[i]);
}
 
 
txtA->setText(text);
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2013, 15:18
Ответы с готовыми решениями:

Код работает, но не так как надо
Здравствуйте. Нужно, чтобы строка поиска увеличивалась в длине от 0px до 130px при нажатии...

Код работает не так, как надо
Нужно ввести строку и слово и чтобы выводились порядковые номера слов в строке, совпадающих с...

Код работает не так, как надо
Нужно ввести строку и слово и чтобы выводились порядковые номера слов в строке, совпадающих с...

Почему не работает так как надо
#include &lt;vcl.h&gt; #pragma hdrstop #include &quot;Unit1.h&quot;...

10
Автор FAQ
2727 / 1423 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
18.06.2013, 22:15 2
ну я бы для начала хотел бы узнать саму задачу которая перед вами стоит....
0
4 / 4 / 1
Регистрация: 28.05.2013
Сообщений: 40
19.06.2013, 00:12  [ТС] 3
у меня есть массив1 - это обычный алфавит.
и есть массив2-массив7.
длинна вводимого слова - 6 букв.
например мне нужно ввести привет, и что бы букву п заменило на 1 букву из 1 массива. р- на 2 букву из 2 массива. и - из 3.
а если легче, без моих массивов, то вся задача состоит в том, что это шифр
каждая последующая буква шифруется определенным сдвигом
1- на 2 назад
2- на 6 назад
3- без изменений
4- на 6 назад
5- на 7 назад
6- на 3 назад
я хотел схитрить и записал готовые сдвиги в 6 массивов и хотел добиться простой замены. но, как видите, не совсем получилось

Добавлено через 33 минуты
как-то нужно использовать либо mid чтобы брал i-ый символ и заменял на символ из другого массива.
либо делать 6 сдвигов. (сдвиги выше)
тут массивы пробные. буквы на халяву.
по идее должен быть алфавит, но так пока проще разобраться
0
4 / 4 / 0
Регистрация: 22.09.2009
Сообщений: 69
19.06.2013, 00:46 4
Ну если ты сдвигаешь по алфавиту, то могу предложить такой вариант.

у тебя есть алфавит в одном массиве, просто находишь индекс нужной буквы в алфавите и сдвигаешь на описанные позиции. Я бы для этой задачи использовал QVector<String> т.к. в нем обустроены функции поиска и выдаче индекса. Ну вот к примеру функция которая будет производить сдвиг:

C++
1
2
3
4
5
6
7
8
9
10
11
QVector<Qstring> alphabet;
 
alphabet.add("a");
...//добавляешь бкувы. Причем можешь в любом порядке, от этого шифр только сложнее.
 
QString encode(QString toEncode, int shift) //где toEncode - символ для шифрования, shift - сдвиг;
{
       int index = alphabet.Count(toEncode)+shift;
       if(index<0)index+=alphabet.Count()-1; //тут -1 потомучто нам нужны индексы а не порядковый номер;
       return alphabet.value(index+shift);
}
Тут если ты уйдешь меньше нуля, мы попадем в конец алфавита так будто перед началом только что закончился другой.Если будут сдвиги вперед нужно тоже самое только переместить с конца в начало, так будто начался новый алфавит, ну типа "а..я а..я а..я":

QString encode(QString toEncode, int shift) //где toEncode - символ для шифрования, shift - сдвиг;
{
int index = alphabet.Count(toEncode)+shift;
if(index<0)index+=alphabet.Count()-1;
if(index>alphabet.Count-1)index-=alphabet.Count-1;
return alphabet.value(index+shift);
}

ну и функцию кодировки куска текста из 6ти букв, можно так изобразить:

C++
1
2
3
4
5
6
7
8
9
10
11
QString encodeString(QString toEncode)
{
         QString result;
         result = encode(toEncode[0],-2);
         result+= encode(toEncode[1],-6);
         result+= encode(toEncode[2],0); // можно просто присвоить toEncode[2];
         result+= encode(toEncode[3],-6);
         result+= encode(toEncode[4],-7);
         result+= encode(toEncode[5],-3);
         return result;
}
Теперь можешь резать текст на куски по 6 символов, и кодировать любые тексты добавив в алфавит знаки препинания цифры и т.п.
1
4 / 4 / 1
Регистрация: 28.05.2013
Сообщений: 40
19.06.2013, 00:54  [ТС] 5
Спасибо, сейчас попробую разобраться.
0
4 / 4 / 0
Регистрация: 22.09.2009
Сообщений: 69
19.06.2013, 00:55 6
Кстати можешь на принципе второй функции шифрования построить дешифратор, просто заменив в сдвиге "-" на "+".
Там кстати я ошибся
C++
1
alphabet.append("a");
Модератор оберни вторую функцию в тег код, спасибо
1
4 / 4 / 1
Регистрация: 28.05.2013
Сообщений: 40
19.06.2013, 01:06  [ТС] 7
т.е. код выглядит так?

C++ (Qt)
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
void tras::EncButtonClick()
 
{   
QString text=txtA->text();
QVector<Qstring> alphabet;
 
alphabet.append("абвгдеёжзийклмнопрстуфхцчшщъыьэюя");
 
QString encode(QString toEncode, int shift) //где toEncode - символ для шифрования, shift - сдвиг;
{
        int index = alphabet.Count(toEncode)+shift;
        if(index<0)index+=alphabet.Count()-1;
        if(index>alphabet.Count-1)index-=alphabet.Count-1;
        return alphabet.value(index+shift);
}
QString encodeString(QString toEncode)
{
         QString result;
         result = encode(toEncode[0],-2);
         result+= encode(toEncode[1],-6);
         result+= encode(toEncode[2],0); // можно просто присвоить toEncode[2];
         result+= encode(toEncode[3],-6);
         result+= encode(toEncode[4],-7);
         result+= encode(toEncode[5],-3);
         return result;
}
txtA->setText(result);
}
0
4 / 4 / 0
Регистрация: 22.09.2009
Сообщений: 69
19.06.2013, 01:10 8
Не, тебе нужно каждый символ алфавита поотдельности добавить, ну или в цикле извлекать из строки:
C++
1
2
3
QString alphabetString = "aбвгд...эюя";
QVector<QString> alphabet;
for(int i=0;i<alphabetString.Count;i++)alphabet.append(alphabetString[i]);
И переменные алфавитов делай глобальными а не внутри кнопки, там может можно и без QVector'а обойтись, может и в самой QString можно узнать индекс символа, ну QString тот же массив))
1
4 / 4 / 1
Регистрация: 28.05.2013
Сообщений: 40
19.06.2013, 01:14  [ТС] 9
А можно попросить вас целиком процедуру написать. я уже не понимаю куда этот кусок вставлять.
как у меня будет читать текст из моего txtA.
и сравнивать его с массивом букв
0
4 / 4 / 0
Регистрация: 22.09.2009
Сообщений: 69
19.06.2013, 01:23 10
у тебя вообще что, окно с формой, просто виджет? переменные определяешь в полях класса виджета, заполняешь их в конструкторе, добавляешь эти две функции, по нажатию на кнопку просто используешь функцию encodeString. Полностью прогу могу написать но не сегодня, завтра вечером если вопрос не решишь
0
4 / 4 / 1
Регистрация: 28.05.2013
Сообщений: 40
19.06.2013, 02:52  [ТС] 11
Цитата Сообщение от Vetos Посмотреть сообщение
у тебя вообще что, окно с формой, просто виджет? переменные определяешь в полях класса виджета, заполняешь их в конструкторе, добавляешь эти две функции, по нажатию на кнопку просто используешь функцию encodeString. Полностью прогу могу написать но не сегодня, завтра вечером если вопрос не решишь
да, просто виджет.
Эх. Ну ладно. Вообще сдавать, завтра, но, возможно дадут еще один день.
Большое спасибо за помощь!

Добавлено через 58 минут
Готово. Сделано.

Добавлено через 25 минут
Хотя хотелось бы увидеть ваш вариант.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.06.2013, 02:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работает не так как надо(классы)
Задача. Создать класс хранящий в себе инн. Проверить его на верность и вывести результат. class...

Find работает не так как надо
Здравствуйте, как правильно решить систему уравнений? PTC Mathcad Prime 3.1

Почему работает не так как надо?
В общем вот в чем вопрос, есть код на СИ. Задача такова ввести с клавы день, месяц, год рождения...

GetJson работает не так, как надо
$.getJSON('mark.php', function(data) { $.each(data, function(lat, lng){ var marker = new...

Ctrl работает не так как надо
При нажатии клавиши ctrl печатается символ *, а при использовании сочетания клавиш вида ctrl +...

Цикл не работает так как надо
Всем привет! Народ, у меня цикл в программе работает не так как надо. 1 круг цикла происходит в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.