Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2009, 23:28   #1
MasterofCDM
Пользователь
 
Регистрация: 02.07.2008
Сообщений: 94
По умолчанию Помогите разобрать со String

Я написал функцию, которая убирает цифры из String

Код:
function TnRabPlan1.ChrCells (var a: String): string;
var
  s :String;
  i :Integer;
begin
    s := '';
    if a = '' then
    begin
        Result := '';
        exit;
    end;
    for i := 0 to Length (a) do
        if (a[i] <> '0') and (a[i] <> '1') and (a[i] <> '2') and (a[i] <> '3') and (a[i] <> '4') and (a[i] <> '5') and (a[i] <> '6') and (a[i] <> '7') and (a[i] <> '8') and (a[i] <> '9') then
            s := s + a[i];
     Result := s;
end;
Проблема в том, чему бы не была равна переменная 'a', на выходе все равно '', если я в начале присвою s := 'q';то на выходе будет 'q', если заменить: s := s + a[i]; на s := a[i];, то на выходе будет последний символ в переменной 'a'. В чем может быть косяк?
MasterofCDM вне форума Ответить с цитированием
Старый 04.06.2009, 23:40   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Нумерация символов начинается с единицы. А тут сначала что-то ещё (в данном случае, похоже, ноль) пишется в s.
Somebody вне форума Ответить с цитированием
Старый 04.06.2009, 23:56   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

попробуй чтото типа такого:
Код:
function TnRabPlan1.ChrCells (a: String): string;
var i:integer;
begin
Result:='';
for i:=1 to Length(a) do
 if not (a[i] in ['0'..'9'])
   then Result:=Result+a[i]
end;

Извеняюся.. я скобки забыл..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось Ntlegend; 05.06.2009 в 10:10.
Ntlegend вне форума Ответить с цитированием
Старый 05.06.2009, 09:35   #4
MasterofCDM
Пользователь
 
Регистрация: 02.07.2008
Сообщений: 94
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Нумерация символов начинается с единицы. А тут сначала что-то ещё (в данном случае, похоже, ноль) пишется в s.
Даже не понимаю о чем идет речь, причем тут нумерация символов?

Ntlegend спасибо за идею, но почему то на строчке:
Код:
if not a[i] in ['0'..'9']
выдает ошибку:
Цитата:
[DCC Error] newRabPlan1.pas(1244): E2015 Operator not applicable to this operand type
MasterofCDM вне форума Ответить с цитированием
Старый 05.06.2009, 10:21   #5
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Цитата:
которая убирает цифры из String
Не лучше ли будет воспльзоваться функцией Stringreplace
Код:
for i:=0 to 9 do
a:= StringReplace(a, IntToStr(i), '', [rfReplaceAll]);
S@fer вне форума Ответить с цитированием
Старый 05.06.2009, 10:45   #6
MasterofCDM
Пользователь
 
Регистрация: 02.07.2008
Сообщений: 94
По умолчанию

S@fer спасибо, чего-то я действительно все усложнил) Но почему мой код не работает(((
MasterofCDM вне форума Ответить с цитированием
Старый 05.06.2009, 11:01   #7
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Цитата:
Но почему мой код не работает(((
тебе же во втором посте ответили.. нумерацыя символов в String'е начинается с 1 а не с 0.. ты пытаешься получить доступ к a[0] в котором хранится #0, тоесть символ окончания строки.. таким образом твоя строка s := s + a[i]; начинается с символа окончания строки, следовательно является пустой.. если ты свой цыкл будешь начинать не с 0 а с 1 - то и твой код будет работать..

S@fer, да StringReplace будет проще.. но если понадобится кроме цыфр еще какие нить символы отсеивать - то проще проверять наличие символа в множестве.. как в моём примере
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 05.06.2009, 21:36   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в оригинальном коде замените все and на or
а то у вас условие очень странное
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.06.2009, 10:19   #9
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
в оригинальном коде замените все and на or
а то у вас условие очень странное
?? Как раз с or и получится странное
Somebody вне форума Ответить с цитированием
Старый 06.06.2009, 12:25   #10
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Если у вас Delphi 2009, то можно писать и так:
Код:
if not CharInSet(a[i], ['0'..'9']);
Это к сведению.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобрать запрос mysql iankov SQL, базы данных 2 04.01.2009 14:03
помогите задачу разобрать Настаська Помощь студентам 2 26.11.2008 16:16
Помогите разобрать прогу! Mute Общие вопросы C/C++ 2 28.12.2006 11:34