Russian Qt Forum
Сентябрь 30, 2024, 22:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5] 6 7 ... 11   Вниз
  Печать  
Автор Тема: string и startsWith  (Прочитано 60674 раз)
thechicho
Гость
« Ответ #60 : Май 26, 2013, 15:45 »

Spark, читая ваши последния сообщения, вспоминается заповедь админа контер-страйк)

1. админ всегда прав;
2. если админ не прав, смотри п.1
аля сам дурак)

вам по делу все говорят, спорить с банальными догмами книжных теоретиков бесполезно.
задавайте конкретные вопросы, либо продолжаем флуд Веселый
Записан
Spark
Гость
« Ответ #61 : Май 26, 2013, 15:52 »

thechicho
По делу тут несколько топиков. Спасибо! Я записываю Улыбающийся.
По поводу флуда вы правы - побережем силы для вопросов по делу Улыбающийся.
На самом деле я бы за это время поправил код используя новые знания. Но видимо флуд нужен как разрядка. Эмоции иногда необходимо выплескивать Улыбающийся. Будем считать, что сегодня выходной Улыбающийся.
Записан
mutineer
Гость
« Ответ #62 : Май 27, 2013, 10:44 »

http://doc.qt.digia.com/4.7/qstring.html
Записан
Spark
Гость
« Ответ #63 : Май 28, 2013, 11:56 »

Спасибо. Пользовался этой справкой http://qt-project.org/doc/qt-4.8/qstring.html#replace
Русскоязычный вариант http://qtdocs.narod.ru/4.1.0/doc/html/index.html
Мои маленькие задачи решены. Использовал, конечно, готовые функции.
Может другим новичкам будет полезно видеть решение:
Код:
string kont = "Готовые библ. использовать проще чем сост. свои.";
QString str = kont.c_str();

str.replace(QString("библ."), QString("библиотеки"));
str.replace(QString("сост."), QString("составлять"));

string text = str.toStdString();

string kontent = string( "Однако: " ) + text;

Дело не только в этих задачках, а вообще дискуссия (не такая уж и длинна) помогла мне осознать механизм манипуляции функциями классов. Кашу в головое чуток разгреб. И теперь я снова могу двигаться дальше, вооружив себя с вашей помощью мощным инструментом. Переставляя кирпичики можно, вполне, экспериментировать самостоятельно. Конечно, вопросы на этом не закончатся, но многое уже можно решить самостоятельно.
Спасибо всем за помощь и советы.
« Последнее редактирование: Май 28, 2013, 12:12 от Spark » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #64 : Май 28, 2013, 12:25 »

Код
C++ (Qt)
...
QString str = kont.c_str();
...
 
Так не совсем правильно. Это будет работать до поры до времени.
Вам в этой теме об этом уже писали (как и о последствиях) и даже написали как сделать правильно. Подмигивающий
Записан
thechicho
Гость
« Ответ #65 : Май 28, 2013, 12:29 »

Код:
str.replace(tr("библ."), tr("библиотеки"));

зачем новичкам советовать говнокод Улыбающийся
философия qt обязывает использовать функцию tr() для работы с текстом
QString QObject::tr ( const char * sourceText, const char * disambiguation = 0, int n = -1 ) [static]

но я на это забил, так как мне не нужно переводить на другой язык.
перевел исходники в utf-8
в main.cpp написал
Код:
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForCStrings(codec);
    QTextCodec::setCodecForTr(codec);
    QTextCodec::setCodecForLocale(codec);
и спокойно пишу так:
Код:
str.replace("библ.", "библиотеки");
Записан
Spark
Гость
« Ответ #66 : Май 28, 2013, 12:59 »

Так не совсем правильно. Это будет работать до поры до времени.
Вам в этой теме об этом уже писали (как и о последствиях) и даже написали как сделать правильно. Подмигивающий
Лучше бы все таки написали как надо правильно. Все таки от этого больше пользы, чем разгадывать загадки понятные не новичкам.
Как понял, вы об этом:
Код
C++ (Qt)
QString str = word.c_str();

А при наличии '\0' в середине строки сколько времени потратим на отладку?

QString   fromStdString ( const std::string & str )
QString   fromStdWString ( const std::wstring & str )
Я не знаю чем для меня грозит "наличии '\0' в середине строки"
Во вторых я не понял как использовать:
QString   fromStdString ( const std::string & str )
QString   fromStdWString ( const std::wstring & str )

Пробовал не получалось.
Ok! Будем работать над ошибками.
Записан
mutineer
Гость
« Ответ #67 : Май 28, 2013, 13:02 »

Во вторых я не понял как использовать:
QString   fromStdString ( const std::string & str )
QString   fromStdWString ( const std::wstring & str )

Пробовал не получалось.

Наверно ты неправильно пробовал и где-то в коде ошибся
Записан
thechicho
Гость
« Ответ #68 : Май 28, 2013, 13:22 »

QString QString::fromStdString ( const std::string & str ) [static]
static говорит о том, что функцию можно использовать без создания объекта QString

Код:
QString str = QString::fromStdString(kont);
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #69 : Май 28, 2013, 13:34 »

Так не совсем правильно. Это будет работать до поры до времени.
Вам в этой теме об этом уже писали (как и о последствиях) и даже написали как сделать правильно. Подмигивающий
Что-то эта правильность смахивает на тупенькую зубрежку и вдалбливание букваря/талмуда  Улыбающийся
Вы серьезно решили поддерживать строки с нулями внутри? Тогда пожалуйста заставьте работать напр это
Код
C++ (Qt)
int main( int, char** )
{
const unsigned char ch[] = { 'a', 'b', 'c', 0, 'd', 'e', 'f' };
QByteArray ba;
for (int i = 0; i < sizeof(ch); ++i) ba += ch[i];
qDebug() << ba.size() << ba;
 
QString str(ba);
qDebug() << str.size() << str;
return 0;
}
« Последнее редактирование: Май 28, 2013, 13:35 от Igors » Записан
Spark
Гость
« Ответ #70 : Май 28, 2013, 13:56 »

Во вторых я не понял как использовать:
QString   fromStdString ( const std::string & str )
QString   fromStdWString ( const std::wstring & str )

Пробовал не получалось.

Наверно ты неправильно пробовал и где-то в коде ошибся

Спасибо, что заставили подумать. Некоторые функции в справочнике с примерами. С ними было проще. Здесь чуть больше понадобилось поломать голову и еще чуток осознать происходящее Улыбающийся.

Код:
string kont = "Готовые библ. использовать проще чем сост. свои.";
QString str = QString::fromStdString( kont );

str.replace(QString("библ."), QString("библиотеки"));
str.replace(QString("сост."), QString("составлять"));

string text = str.toStdString();

string kontent = string( "Однако: " ) + text;

Вроде как работает.
На этот раз ошибки есть?

P.S. Хотя смотрю, пока доходило Улыбающийся, появились и более конкретные примеры. Возможно, самостоятельно разобраться наверное все таки было полезнее. Что то уляжется в голове.
Но все равно всем спасибо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #71 : Май 28, 2013, 13:59 »

Мои маленькие задачи решены. Использовал, конечно, готовые функции.
Может другим новичкам будет полезно видеть решение:
Код:
string kont = "Готовые библ. использовать проще чем сост. свои.";
QString str = kont.c_str();

str.replace(QString("библ."), QString("библиотеки"));
str.replace(QString("сост."), QString("составлять"));
QString можно было и не писать, т.к. QString имеет конструктор с аргументом const char *. По поводу качества решения с переливанием строк уже говорили. Однако впечатляет заметно изменившаяся самооценка - вот уже звучат нотки "конечно", "будет полезно"  Улыбающийся А ведь с точки зрения производительности кода - говнокод был, говнокод остался. Конечно это экономит время программиста, такое решение имеет право на жизнь. Но гордиться здесь совсем нечем.

Всем понятно что без интенсивного использования тулзов сейчас просто не прожить. Но опасность в том что "поиск готовенького" съедает все время и силы программиста, на что-то другое времени просто не остается. И когда нужно действовать самостоятельно (а придется) человек уже просто разучился (если вообще когда-то умел).  
Записан
Spark
Гость
« Ответ #72 : Май 28, 2013, 14:16 »

Мои маленькие задачи решены. Использовал, конечно, готовые функции.
Может другим новичкам будет полезно видеть решение:
Код:
string kont = "Готовые библ. использовать проще чем сост. свои.";
QString str = kont.c_str();

str.replace(QString("библ."), QString("библиотеки"));
str.replace(QString("сост."), QString("составлять"));
QString можно было и не писать, т.к. QString имеет конструктор с аргументом const char *. По поводу качества решения с переливанием строк уже говорили. Однако впечатляет заметно изменившаяся самооценка - вот уже звучат нотки "конечно", "будет полезно"  Улыбающийся А ведь с точки зрения производительности кода - говнокод был, говнокод остался. Конечно это экономит время программиста, такое решение имеет право на жизнь. Но гордиться здесь совсем нечем.

Всем понятно что без интенсивного использования тулзов сейчас просто не прожить. Но опасность в том что "поиск готовенького" съедает все время и силы программиста, на что-то другое времени просто не остается. И когда нужно действовать самостоятельно (а придется) человек уже просто разучился (если вообще когда-то умел).  
Изменения самооценки никакой не произошло. Как был неучем так неучем и остался Улыбающийся.
Ведь из всего топика для меня, пожалуй, важен не сам код, а то, что я научился пользоваться готовыми функциями на кирпичному уровне Улыбающийся. Теперь можно и изнутри посмотреть как они устроены. А там глядишь и сам напишу свою первую функцию простенькую и смогу ее использовать. Все таки метод от общего к частному действует эффективнее. Намного интереснее.

На счет переливания я уже писал, что если бы программа с нуля делалась, то другое дело. А здесь я ковыряю чужой код. И программа не для новичков. Сознательно упрощаю примеры, что бы получить только выжимку в ответах. Но тот модуль который я ковыряю, вполне осознаю и не плохо получается подогнать для своих нужд и нужд страждущих Улыбающийся. С виду выглядит не плохо и работает без эксцессов. Изнутри буду чистить по мере набора опыта. И в общем то постепенно становится видно, где насорил в коде.

А вообще ситуация напоминает как и везде. Сначала профи пишут, что это очень просто, а затем начинают спорить, как это просто сделать Улыбающийся.

А я так и не совсем понял. Оба варианта кода можно использовать. Или второй предпочтительней?

Спасибо за помощь. Для меня эта помощь на данном этапе куда лучше лекций.
« Последнее редактирование: Май 28, 2013, 14:20 от Spark » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #73 : Май 28, 2013, 14:34 »

Что-то эта правильность смахивает на тупенькую зубрежку и вдалбливание букваря/талмуда  Улыбающийся
Это впечатление у вас из-за вашей некомпетентности. Не переживайте. Улыбающийся
Почитайте что нибудь про многобайтовые кодировки. Посмотрите на реализацию метода fromStdString...
Для того, что бы программировать качественный софт, нужны знания. А подставлять разные методы класса и свою программу в надежде, что все заработает - опасно.
Оно как правило вначале работает, а немного внешние условия поменяются (ее запустит китайский студент) и она перестает работать.

Вы серьезно решили поддерживать строки с нулями внутри? Тогда пожалуйста заставьте работать напр это
Это что такое? Очередное ваше произведение? Что с ним не так?
Записан
thechicho
Гость
« Ответ #74 : Май 28, 2013, 14:36 »

//А я так и не совсем понял. Оба варианта кода можно использовать. Или второй предпочтительней?

Цитировать
А ведь с точки зрения производительности кода - говнокод был, говнокод остался. Конечно это экономит время программиста, такое решение имеет право на жизнь. Но гордиться здесь совсем нечем.

Код:
string kont = "Готовые библ. использовать проще чем сост. свои.";
QString tmp = QString::fromStdString(kont);

tmp.replace("библ.", "библиотеки");
tmp.replace("сост.", "составлять");
tmp.prepend("Однако: ");

kont = tmp.toStdString();
Записан
Страниц: 1 ... 3 4 [5] 6 7 ... 11   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.22 секунд. Запросов: 23.