Russian Qt Forum

Qt => Вопросы новичков => Тема начата: rudireg от Март 16, 2013, 10:49



Название: QString и парсер
Отправлено: rudireg от Март 16, 2013, 10:49
ПРивет уважаемые
подскажите наиболее изящное решение данной заданичи
Имеется строка
QString str = "Hello=world? fromrudi";
Задача: спарсить строку world
Как это сделать наиболее коротко.



Название: Re: QString и парсер
Отправлено: Dancing_on_water от Март 16, 2013, 10:58
Если подобных вывзовов дохрена, то быстрее всего будет работать поиск ключевых символов по подстроке. Если нет, то юзайте QRegExp


Название: Re: QString и парсер
Отправлено: rudireg от Март 16, 2013, 11:18
Нашел метод вроде, не знаю на сколько он скоростной,
но если часто приходиться парсить строки, придется писать обертку для QString
так как данный вид записи очень громоздкий
Код:
    QString str = "Hello=world? fromrudi";
    int start = str.indexOf("o=");
    start += QString("o=").size();
    int end = str.indexOf("? f");
    QString rezult = str.mid(start, end - start);


Название: Re: QString и парсер
Отправлено: Bepec от Март 16, 2013, 11:21
Если нет жёстких требований к ресурсам, используй regExp.


Название: Re: QString и парсер
Отправлено: Igors от Март 16, 2013, 11:33
Нашел метод вроде, не знаю на сколько он скоростной,
но если часто приходиться парсить строки, придется писать обертку для QString
так как данный вид записи очень громоздкий
Зато понятно что Вы делаете. Выделить в ф-цию, предусмотреть что префикса/суффикса может не быть и upper case - вполне норм. Неясно откуда возьмете "o=" и "? f" и почему уверены что их в строке совсем не по одному - ну то уже Ваше дело


Название: Re: QString и парсер
Отправлено: rudireg от Март 16, 2013, 12:10
Неясно откуда возьмете "o=" и "? f" и почему уверены что их в строке совсем не по одному - ну то уже
[/quote]
Это нужно будет обрабатывать обязательно
действительно могут быть повторы меток


Название: Re: QString и парсер
Отправлено: kambala от Март 16, 2013, 12:58
если интересует решение через регулярки:
Код
C++ (Qt)
QRegExp re("=(.+)\\?");
re.setMinimal(true);
if (re.indexIn(str) != -1)
   QString result = re.cap(1);