Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не получается перебор строки

79K
19 марта 2013 года
timondrik
12 / / 09.11.2012
 
Код:
AnsiString str;
int strLen = edtNumCartridge->Text.Length();
for(int i=1; i<=strLen; i++){
    if(edtNumCartridge->Text.SubString(i,1) != "," || i == strLen){
        str = str+edtNumCartridge->Text.SubString(i,1);
    }else{
        Memo1->Lines->Add(str);
        str = "";
    }
}
В поле ввода edtNumCartridge строка такого вида -> "1,2,4,6,7"
Строка должна разбиться, т.е. одна строка в мемо 1, на другой 2 и т.д.
В принципе всё получается, но поледняя цифра не выводится. После последней цифры нет запятой и соответственно от судя по первому моему условию последнюю цифру не выводил.
Я поставил ещё одно условие, чтобы если ещё и дойдет до конца строки, то тоже выведет последние символы, но последняя цифра так и не выводится.
Мне кажется где то я сглупил, понять не могу где. Прошу помощи в данной проблеме.
252
19 марта 2013 года
koderAlex
1.4K / / 07.09.2005
любая программа начинается с алгоритма . вы алгоритм составляли ?
ещё одну переменную типа ансистринг лень было завести и передать ей исходную строку ? в ансистринг вагон встроенных методов и функций , сильно облегчающие жизнь . )
79K
19 марта 2013 года
timondrik
12 / / 09.11.2012
Да вы что какие ярые? Что жизнью обиженые? Что за тон разговора?
Что не спросишь всё с давлением встречаете. Если бы я был профи, я бы тут вопросы не задавал, а если уже просьбы о помощи у вас вызывают злобу, то просьба, вымещайте её на чем нибудь другом или просто проходите мимо.
1
19 марта 2013 года
kot_
7.3K / / 20.01.2000
Цитата: timondrik
Да вы что какие ярые? Что жизнью обиженые? Что за тон разговора?
Что не спросишь всё с давлением встречаете. Если бы я был профи, я бы тут вопросы не задавал, а если уже просьбы о помощи у вас вызывают злобу, то просьба, вымещайте её на чем нибудь другом или просто проходите мимо.


Претензии свои можешь маме высказывать. Здесь этого делать не стоит. Во-первых, никто тебе здесь ничем не обязан. Во-вторых - если тебе кажется что с тобой разговаривают как с идиотом - то возможно причина в первую очередь в тебе. Не веди себя как идиот. Ведь это просто.
Что касается твоего вопроса - у класса TStrings, от которого наследуется Lines есть свойство TextDelimeter и т.п. Почему не использовать его? Зачем этот корявый код? Я например не вижу необходимости здесь реализовывать собственную функцию - тем более ТАК.

252
19 марта 2013 года
koderAlex
1.4K / / 07.09.2005
во первых , я вам указал на вашу основную ошибку - попытку написать код "сходу" . это основная ошибка всех начинающих .
во вторых , я вам сказал , что сделал бы на вашем месте - глянул бы методы и функции для ансистринг (что по моему вполне очевидно), а не изобретал велосипед .
вы не профи , вы тут ученик . соответственно тон выбран поучающий . я не хочу решать за вас такие задачки . я хочу , что бы вы научились их сами решать .
79K
20 марта 2013 года
timondrik
12 / / 09.11.2012
Цитата: koderAlex
во первых , я вам указал на вашу основную ошибку - попытку написать код "сходу" . это основная ошибка всех начинающих .
во вторых , я вам сказал , что сделал бы на вашем месте - глянул бы методы и функции для ансистринг (что по моему вполне очевидно), а не изобретал велосипед .
вы не профи , вы тут ученик . соответственно тон выбран поучающий . я не хочу решать за вас такие задачки . я хочу , что бы вы научились их сами решать .


koderAlex, то что вы посоветовали я учел прочитав сообщение, а такая форма давления как в вашем поучительном сообщение мало кому понравится. Объяснить мои ошибки можно и цивилизованном путёт. Лично я такого рода поучения даже в школе бы воспринял в штыки, мало приятно воспринимать информацию такого рода.

А теперь относительно неидиотов. kot_, если я идиот, то исходя из этого пологаю у тебя вообще синдром дауна и мать мою не вздумай трогать. koderAlex в отличии от тебя выправил ситуацию и судя по сему ты тут админ, раз так уверено раскидываешся оскарблениями. Рыба гниет с головы.

89K
20 марта 2013 года
Sergey Brill
4 / / 20.03.2013
Не работал с AnsiString, подсказать какие методы использовать надо не смогу.
Ошибка в алгоритме - когда i станет равно strLen, edtNumCartridge->Text.SubString(i,1) вернет null или пустую строку, так как обычно в таких методах i - это начальная позиция подстроки.
Попробуйте такой вариант
Код:
AnsiString str;
int strLen = edtNumCartridge->Text.Length();
for(int i=0; i<strLen; i++){
    j = 0;
    if(edtNumCartridge->Text.SubString(i,1) != ","){
    while (edtNumCartridge->Text.SubString(i,1) != "," && i<strLen) {
        j++;
        i++;
    }
        str = str+edtNumCartridge->Text.SubString(i,j);
    }
    if (j != 0){
        Memo1->Lines->Add(str);
        str = "";
    }
}
Но лучше, конечно, разобраться с AnsiString, наверняка там есть что-то подходящее
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог