Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/75: Рейтинг темы: голосов - 75, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 28
1

Работа с QString, замена символов

04.11.2019, 08:15. Показов 15378. Ответов 11

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста разобраться: как сделать чтобы при замене цифры 1 на 2, если далее идёт значение заменить 2 на 1, то в тексте не заменялись все на последнее значение, т.е если 1 заменяется на 2, но если 2 уже была заменена в тексте, то она не заменялась обратно на 1. И с другими символами также - если была введена a, то она заменяется на b, но если с b произошла замена, то её обратно не менять, а если замены не было, тогда поменять.

Код:
C++ (Qt)
1
2
3
4
5
6
7
8
9
void Project::on_pushButton_clicked()
{
    QString a = ui->textEdit->toPlainText();
    a.replace("1", "2");
    a.replace("2", "1");
    a.replace("a", "b");
    a.replace("b", "a");
    ui->textBrowser->setText(a);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.11.2019, 08:15
Ответы с готовыми решениями:

Поиск символов в строке QString
как определить , есть ли в нашей строке(str1) символы JFIF, если да то вывести сообщение +

Qstring удалить все символы после определенных символов в строке
есть строка: как удалить все что идет после &sa

работа c qstring
пишу текстовый редактор , QString word=ui->lineEdit->text(); QString...

Работа с QString
подскажите , пожалуйста, аналоги функциям pos & copy из delphi Function Pos(Substr : String; S :...

11
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
04.11.2019, 08:40 2
"Вручную" перебирать строку от первого до последнего символа и менять то, что нужно.
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
04.11.2019, 08:42 3
Лучший ответ Сообщение было отмечено Goodzon999 как решение

Решение

если я правильно понял

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
#include <QMap>
#include <QDebug>
 
int main(int argc, char *argv[])
{
    QMap<QChar,QChar> repl
    {
        {'1','2'},
        {'2','1'},
        {'a','b'},
        {'b','a'},
    };
    
    QString str = "__a__1_b__1_b__2a___1__22_2_b_1__2_a___2_a_1__2_b__b_";
    qDebug()<<str;
    
    for(auto& c:str)
    {
        auto it=repl.find(c);
        if(it==repl.end())continue;
        c=it.value();
    }
    qDebug()<<str;
}
"__a__1_b__1_b__2a___1__22_2_b_1__2_a___2_a_1__2_b__b_"
"__b__2_a__2_a__1b___2__11_1_a_2__1_b___1_b_2__1_a__a_"
1
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 28
04.11.2019, 09:27  [ТС] 4
Да, верно, но как мне тогда сделать вывод в textBrowser? У меня сделано через ui->
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
04.11.2019, 09:38 5
Goodzon999, ui->textEdit->setPlainText ?
0
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 28
04.11.2019, 09:45  [ТС] 6
Да, всё верно как мне туда вывод прописать, т.е. я ввожу в textEdit, а выводить в textBrowser.
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
04.11.2019, 09:55 7
Goodzon999, ui->textBrowser->setPlainText
0
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 28
04.11.2019, 10:44  [ТС] 8
Алексей1153,
Всё, спасибо огромное, немного тупанул, не туда вывод сделал. Получилось.

Добавлено через 24 минуты
Алексей1153, Ещё вопрос, а как тогда быть с русскими символами? Используется кодировка UTF8, и например если q как \161 можно прописать, то с русскими символами не получается, там идёт двойное значение и его не принимает - й это \320\271, даже если написать {'q','й'}
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
04.11.2019, 10:46 9
Goodzon999, перегоняй utf8 в юникод QString::fromUtf8
0
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 28
04.11.2019, 11:28  [ТС] 10
Алексей1153, у меня в QMap<QChar,QChar> repl возникает ошибка, а не в QString
project.cpp:31:17: warning: multi-character character constant
0
фрилансер
5499 / 5095 / 1047
Регистрация: 11.10.2019
Сообщений: 13,346
04.11.2019, 11:32 11
Goodzon999, это не ошибка, а предупреждение. Поставь префикс L

C++ (Qt)
1
2
3
4
5
6
7
QMap<QChar,QChar> repl
    {
        {L'1',L'2'},
        {L'2',L'1'},
        {L'a',L'b'},
        {L'й',L'a'},
    };
1
0 / 0 / 0
Регистрация: 29.04.2019
Сообщений: 28
04.11.2019, 11:35  [ТС] 12
Алексей1153, Работает, спасибо!
0
04.11.2019, 11:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2019, 11:35
Помогаю со студенческими работами здесь

QFile::rename(QString name1, QString name2) не работает под Win
Добрый день! Столкнулся с проблемой: QFile::rename(QString name1, QString name2) не работает под...

Как разбить QString строку на подстроки, т.е. на qlist <qstring> ?
Как разбить QString строку: &quot;/michaeltosell&quot;, &quot;/vorago&quot;, &quot;/yanochka147&quot;, &quot;gertylohhg&quot;, на...

QList <QPair <QString, QString> > - сортировка пузырьком
Возможно ли? =) Есть список городов с их идентификационным номером, например:...

Cтрока: Как сконвертировать QString в const QString?
Доброго времени суток. Как сконвертировать QString в const QString


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru