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:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BlueIceScream
  опции профиля:
сообщение 27.12.2011, 20:23
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 21.11.2011
Из: Республика Дагестан
Пользователь №: 3016

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




Репутация:   3  


Используйте фунции:

QString mid ( int position, int n = -1 ) const
QString right ( int n ) const
int toInt ( bool * ok = 0, int base = 10 ) const
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zloiia
  опции профиля:
сообщение 28.12.2011, 1:13
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 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
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
zloiia
  опции профиля:
сообщение 29.12.2011, 4:09
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(crazymonkey @ 28.12.2011, 20:53) *
Цитата(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 Текстовая версия Сейчас: 30.11.2024, 13:57