Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/76: Рейтинг темы: голосов - 76, средняя оценка - 4.82
6 / 6 / 2
Регистрация: 11.07.2013
Сообщений: 186
1

Замена символов пробела другими символами

11.08.2014, 14:16. Показов 13953. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Столкнулся с необходимостью замены пробела другими символами.
Решил попробовать для эксперимента заменить на запятую.
Есть QLabel *lb и QLineEdit * ln
Играю с сигналы слоты:
C++ (Qt)
1
2
3
...
QObject::connect(ln,SIGNAL(textChanged(QString)),lb,SLOT(setText(QString)));
...
Работает.
Теперь пытаюсь сделать самое главное, заменить пробелы
C++ (Qt)
1
2
3
4
5
6
7
8
9
...
QObject::connect(ln,SIGNAL(textChanged(QString)),lb,SLOT(FormatText(QString)));
...
void MyWindow::FormatText(QString str)
{
    QStringList list;
    list = str.split(QRegExp("\\s+"));
}
...
И что-то на этом я заступорился. Не могу отладить даже. Где косяк?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2014, 14:16
Ответы с готовыми решениями:

Замена одних символов - другими в файле
Помогите плиз, надо в файле заменить одну букву на другую, причем прямо в слове. Пример, в hдltst...

Замена в файле одних символов Юникода другими
Буду очень признателен, если кто-нибудь подскажет, как правильно сделать скрипт, который бы заменял...

Замена одних символов другими в имени каждого файла в заданной папке
Добрый день! Пытался создать пакетный файл, который во всех файлах в папке заменит букву t на...

Заменить в строке пробелы другими символами
дано предложение все его пробелы заменить на символ * напишите пожалуйста прогу..

10
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
11.08.2014, 14:24 2
Цитата Сообщение от ab-vrn Посмотреть сообщение
QObject::connect(ln,SIGNAL(textChanged(QString)),lb,SLOT(FormatText(QString)));
QLabel не имеет слота FormatText(QString)

Если слот в вашем классе то напишите

C++ (Qt)
1
QObject::connect(ln,SIGNAL(textChanged(QString)),SLOT(FormatText(QString)));
1
232 / 232 / 69
Регистрация: 30.09.2012
Сообщений: 545
11.08.2014, 14:29 3
ab-vrn, чтобы заменить одни лишь пробелы вполне подойдет replace и даже регулярных выражений и стрингЛистов не надо будет
http://qt-project.org/doc/qt-5... #replace-4
1
6 / 6 / 2
Регистрация: 11.07.2013
Сообщений: 186
11.08.2014, 16:16  [ТС] 4
QLabel не имеет слота FormatText(QString)
Да. Я этот слот создаю как public slots.

C++ (Qt)
1
QObject::connect(ln,SIGNAL(textChanged(QString)),SLOT(FormatText(QString)));
Как это так? А почему Вы не указываете кто принимает сигнал?
0
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
11.08.2014, 16:19 5
Цитата Сообщение от ab-vrn Посмотреть сообщение
Как это так? А почему Вы не указываете кто принимает сигнал?
Если в вашем классе все делается то
C++ (Qt)
1
QObject::connect(ln,SIGNAL(textChanged(QString)),SLOT(FormatText(QString)));
эквивалентен
C++ (Qt)
1
QObject::connect(ln,SIGNAL(textChanged(QString)), this, SLOT(FormatText(QString)));
1
6 / 6 / 2
Регистрация: 11.07.2013
Сообщений: 186
12.08.2014, 14:01  [ТС] 6
Тут вопрос в том, что если в слоте лейбла вместо созданного мной FormatText(QString) указать setText(QString) - текст в неизменном виде я увижу в QLable. А вот с FormatText(QString) беда. Беда в том, что даже ошибок нет. Всё запускается, но не работает. Обидно, хоть бы ошибку написал какую.

Добавлено через 1 минуту
эквивалентен
Хм... спасибо. Действительно, что эт я....

Добавлено через 21 час 39 минут
А что можно использовать для добавления символа вместо пробела.
0
232 / 232 / 69
Регистрация: 30.09.2012
Сообщений: 545
12.08.2014, 14:08 7
Лучший ответ Сообщение было отмечено ab-vrn как решение

Решение

ab-vrn, Я же уже говорил, replace с этим справиться, например
C++ (Qt)
1
2
QString ex = "foo bar baz";
qDebug() << ex.replace(" ",",");// вывод foo,bar,baz
1
6 / 6 / 2
Регистрация: 11.07.2013
Сообщений: 186
12.08.2014, 16:01  [ТС] 8
Спасибо, однако я уже пробовал использовать replace. Он плодит запятые. Мне нужна только 1 после окончания слова.
0
232 / 232 / 69
Регистрация: 30.09.2012
Сообщений: 545
12.08.2014, 17:03 9
ab-vrn, то есть у вас в строке несколько пробелов или как?
Дайте пример чтобы было ясно, какой строка есть, а какой должна стать.
0
6 / 6 / 2
Регистрация: 11.07.2013
Сообщений: 186
12.08.2014, 17:22  [ТС] 10
C++ (Qt)
1
2
3
4
5
6
7
8
9
void MyWindow::FormatText(QString str)
{
...
QStringList list;
list = str.split(QRegExp("\\W+"), QString::SkipEmptyParts);
int a = 0;
textLable->setText(str);
...
}
Далее, я всё вывожу в QLabel. Смотрел в режиме отладки и получается так, что в list содержится список без пробелов, а при выводе в QLabel они есть. Немного не пойму почему это происходит.
0
232 / 232 / 69
Регистрация: 30.09.2012
Сообщений: 545
12.08.2014, 19:17 11
Лучший ответ Сообщение было отмечено ab-vrn как решение

Решение

ab-vrn,
Цитата Сообщение от ab-vrn Посмотреть сообщение
в list содержится список без пробелов
Не удивительно, ведь вы разделили str и получили то, чего желаете.
Цитата Сообщение от ab-vrn Посмотреть сообщение
при выводе в QLabel они есть
Тоже не удивительно, ведь split() возращает стрингЛист, но абсолютно не изменяет саму строку. Поетому вы должны отдельно получить лист (что у вас получилось), но после этого применить к str тот же replace(), перегруженая версия которого так же поддерживает регулярки, и все это дело уже можно помещать в лэйбл
C++ (Qt)
1
2
3
4
5
QStringList list;
list = str.split(QRegExp("\\s+"), QString::SkipEmptyParts);//получаем лист, но str такая же, как и была
int a = 0;
str.replace(QRegExp("\\s+"),",");//а вот тут мы её меняем
textLable->setText(str);          //и только сейчас помещаем в лэйбл
Я применил здесь \\s+, то есть ищу пробелы, хотя если вы уверены, что вам нужен именно \\W+, то конечно же юзайте,вы лучше знаете специфику вашего задания.
1
12.08.2014, 19:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2014, 19:17
Помогаю со студенческими работами здесь

Нарисовать прямоугольник - обводка одними символами, заливка - другими
Нарисовать прямоугольник - обводка одними символами, заливка - другими. Пользователь задаёт...

Как сравнить символы ячеек массива с другими символами в case?
Доброго времени суток!Как сравнить 11 ячеек с введенными символами в процедуре с какими-либо...

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

Заполнить 2 двухмерных массива символами. Написать функцию которая ставит символ пробела в старшем и младшем...(Использование директив)
Задание: Заполнить 2 двухмерных массива разной длины символами. Написать функцию которая ставит...


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

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