Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Yuriy от Декабрь 06, 2011, 23:48



Название: Удаление чисел с конца строки
Отправлено: Yuriy от Декабрь 06, 2011, 23:48
Простая задача. Нужно удалить числа с конца строки. Много перепробывал вариантов, сейчас остановился на этом:
Код:
while(nameForFind[nameForFind.length()-1].digitValue() != -1)
    nameForFind.chop(1);
Работает вроде бы неплохо, я вот думаю, может быть кто-нибудь уже сталкивался с подобной задачей и нашел более оптимальное/скоростное решение?


Название: Re: Удаление чисел с конца строки
Отправлено: Пантер от Декабрь 06, 2011, 23:51
Зачем изменять строку на каждой итерации? Найди нужный индекс и с него удали.


Название: Re: Удаление чисел с конца строки
Отправлено: Yuriy от Декабрь 06, 2011, 23:54
Я честно говоря раньше не "заморачивался" на тему работы со строками и влегкую влепил бы сюда QRegExp к примеру, но после недавних экспериментов и потери производительности На 20-30%% из за вот таких нюансов начал "экономить на спичках". Создать счетчик на число найденных с конца числовых значений?


Название: Re: Удаление чисел с конца строки
Отправлено: Пантер от Декабрь 07, 2011, 00:00
Код
C++ (Qt)
int index = str.size () - 1;
for (; index >=0 && str [index].isDigit (); --index) {
}
if (index > 0) {
 str.remove (index + 1, str.size ());
}
 
Уже засыпаю практически, это то, что пришло первое на ум.


Название: Re: Удаление чисел с конца строки
Отправлено: Yuriy от Декабрь 07, 2011, 00:09
Спасибо огромное! А то у самого голова не варит уже.


Название: Re: Удаление чисел с конца строки
Отправлено: qt_user от Декабрь 07, 2011, 01:39
помойму, лучше так:
Код
C++ (Qt)
int index = str.size () - 1;
for (; index >=0 && str [index].isDigit (); --index) {
}
++index;
if ( index >= 0 && index < str.size() ) {
 str.remove (index, str.size ());
}
 


Название: Re: Удаление чисел с конца строки
Отправлено: Yuriy от Декабрь 07, 2011, 01:54
А я сейчас вот так сделал, пока другим занимался, но все равно так и хочется вернуться к этой теме:
Код:
const int length = strlen(BaseName);
int index = length - 1;

while(isdigit(BaseName[index]) && index >=0) --index;
QString nameForFind = (index == -1) ? "undefined" : QString::fromAscii(BaseName,index+1);

в функцию приходит const char* и QString считывается с него только в нужных размерах. По-моему здорово, только не знаю этот самый isdigit() кроссплатформенный вообще ???


Название: Re: Удаление чисел с конца строки
Отправлено: Yuriy от Декабрь 07, 2011, 02:03
И вообще на asm в 15-20 тактов можно заколотить. Только вот собрать потом на бесплатном M& навряд ли получится. ;D


Название: Re: Удаление чисел с конца строки
Отправлено: qt_user от Декабрь 07, 2011, 10:43
в функцию приходит const char* и QString считывается с него только в нужных размерах. По-моему здорово, только не знаю этот самый isdigit() кроссплатформенный вообще ???
если кодировки стоят правильно, то все будет нормально ( setCodecForCString() )