crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> QString вынуть int
crazymonkey
  опции профиля:
сообщение 27.12.2011, 20:14
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 23.6.2011
Пользователь №: 2764

Спасибо сказали: 2 раз(а)




Репутация:   0  


Доброго времени суток.
Подскажите как из строки вида "A_14_R4"
вынуть 14 и 4 как int

В качестве временного решения использую
QString tm = //некая строка;
QChar* data1 = tm.data();
++data; //некторое количесвто раз повторить
int tm_wt = data1->toAscii() - 48;

:unsure: :o:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
zloiia
  опции профиля:
сообщение 28.12.2011, 1:13
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 25
Регистрация: 5.5.2011
Пользователь №: 2655

Спасибо сказали: 5 раз(а)




Репутация:   0  


А можно регулярным выражением пройтись. Лично я, если это не критичный кусок кода или чтобы не заморачиваться с позициями, предпочитаю такой вариант. crazymonkey, если у вас еще и длины чисел гуляют, я бы все-таки посмотрел в сторону регулярных выражений. Я не знаю точных подробностей как там у Вас строка может выглядеть, поэтому навскидку накидал пример

    QString str("A_14_R4");
    QRegExp rx("[a-zA-Z]_(\\d+)_[a-zA-Z](\\d+)"); //сам шаблон

    if(rx.indexIn(str,0)!=-1) //нашли вхождение шаблона
    {
        rx.cap(1); //тут у нас первое число
        rx.cap(2); //а тут второе
    }


Удобство в том что при правильно составленном шаблоне сразу и валидацию строки можно произвести быстро :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crazymonkey
  опции профиля:
сообщение 28.12.2011, 19:53
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 26
Регистрация: 23.6.2011
Пользователь №: 2764

Спасибо сказали: 2 раз(а)




Репутация:   0  


Цитата(zloiia @ 28.12.2011, 2:13) *
А можно регулярным выражением пройтись. Лично я, если это не критичный кусок кода или чтобы не заморачиваться с позициями, предпочитаю такой вариант. crazymonkey, если у вас еще и длины чисел гуляют, я бы все-таки посмотрел в сторону регулярных выражений. Я не знаю точных подробностей как там у Вас строка может выглядеть, поэтому навскидку накидал пример

    QString str("A_14_R4");
    QRegExp rx("[a-zA-Z]_(\\d+)_[a-zA-Z](\\d+)"); //сам шаблон

    if(rx.indexIn(str,0)!=-1) //нашли вхождение шаблона
    {
        rx.cap(1); //тут у нас первое число
        rx.cap(2); //а тут второе
    }


Удобство в том что при правильно составленном шаблоне сразу и валидацию строки можно произвести быстро :)


Люблю регулярные выражения, но не счел нужным применения их в этой ситуации.
Была бы строка подлиннее, тогда я бы точно пользовался RegExp в полной мере.
А для строки такого формата я сделал так
1) Разбил строку по '_' функцией split
2) Воспользовался функциями которые предложил BlueIceScream
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.4.2024, 4:14