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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2009, 11:52   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Строка в массив из строк

Отрезок кода такой:
Код:
While S<>'' do
   Begin
    A[I]:=Copy(S,1,Pos(' ',S)-1);
    Delete(S,1,Pos(' ',S));
    Inc(I);
   End;
Вроде все прелестно, но когда забиваю такую строку:
'ВОДКА ПИВО РОЗОВЫЙ' Код бесится и перескакивает через несколько сотен строк. Мне удалось локализовать ошибку. Строка Delete(S,1,Pos(' ',S));
Первые два слова заносятся нормиально и вводятся в массив, но после третьего нет пробела и программа получает команду DELETE(S,1,0), что приводит к неопознанным ошибкам. Как выйти из этой ситуации? Я пока вижу только один способ - перед циклом дописывать ' ' в конце строки. Может есть способ получше? Как-то изменить цикл?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 05.10.2009, 12:16   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

не самый лучший вариант
Код:
begin
 s:='ВОДКА ПИВО РОЗОВЫЙ';
 while s<>'' do
 begin
  if Pos(' ',S)>0 then
  begin
   A[i]:=Copy(S,1,Pos(' ',S)-1);
   Delete(S,1,Pos(' ',S));
  end else
  begin
   A[i]:=s;
   s:='';
  end;
  inc(i);
 end;
end;
а может и проще как вы говорили перед циклом while дописать
Код:
s:=s+' ';
SERG1980 вне форума Ответить с цитированием
Старый 05.10.2009, 12:30   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
а может и проще как вы говорили перед циклом while дописать
Я просто подумал, может это как-то скажется на цикле. Вроде никак, но мало ли что. Перестрахуюсь.
Цитата:
не самый лучший вариант
Ну почему же. Прекрасный вариант. Спасибо.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 05.10.2009, 12:36   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если так:
Код:
 for e:=1 to length(S)' do   Begin
    A[i]:=a[i]+s[e];
    if s[e]=' ' then  Inc(I);
   End;
Помоему надежнее и быстрее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2009, 13:02   #5
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Радость

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Отрезок кода такой:
Код:
While S<>'' do
   Begin
    A[I]:=Copy(S,1,Pos(' ',S)-1);
    Delete(S,1,Pos(' ',S));
    Inc(I);
   End;
Вроде все прелестно, но когда забиваю такую строку:
'ВОДКА ПИВО РОЗОВЫЙ' Код бесится и перескакивает через несколько сотен строк. Мне удалось локализовать ошибку. Строка Delete(S,1,Pos(' ',S));
Первые два слова заносятся нормиально и вводятся в массив, но после третьего нет пробела и программа получает команду DELETE(S,1,0), что приводит к неопознанным ошибкам. Как выйти из этой ситуации? Я пока вижу только один способ - перед циклом дописывать ' ' в конце строки. Может есть способ получше? Как-то изменить цикл?
Код:
var
T:Tstringlist;
S:string;
begin
S:='Cola Pepsi blue';
T:=Tstringlist.Create'
T.text:=Stringreplace(S,' ',#10,rfreplaceall);// или #13 непомню точно
В зависимости от коментария выше получатся будет примерно тот-же результат Если нужно разбить строку на слова по полочкам)
Есл нужен массив то перебить элементы думаю не составит большого труда. + в том что разделителем может быть любой символ или строка/слово.

ПС писал в браузере.
Lime вне форума Ответить с цитированием
Старый 05.10.2009, 13:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
T.text:=Stringreplace(S,' ',#10,rfreplaceall);// или #13 непомню точно
А что это даст автору то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2009, 13:07   #7
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что это даст автору то?
Реализация задачи дургим способом.(на всякий случай)
Lime вне форума Ответить с цитированием
Старый 05.10.2009, 13:18   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Всем спасибо, я уже реализовал и откомпилил. Перехожу к следующей части моего коварного замысла. Всем спасибо.
________________
Код:
Θ Зарегистрироваться на форуме.
Θ Задать вопрос
Ο Поработить людей
Ο Уничтожить мир
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 05.10.2009, 14:47   #9
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
Радость

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Всем спасибо, я уже реализовал и откомпилил. Перехожу к следующей части моего коварного замысла. Всем спасибо.
________________
Код:
Θ Зарегистрироваться на форуме.
Θ Задать вопрос
Ο Поработить людей
Ο Уничтожить мир
Можно позаимствовать твой коварный план ?) Он мне по душе
Lime вне форума Ответить с цитированием
Старый 05.10.2009, 16:39   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

[FLOOD] Бери, мне не жалко. Будем вдвоем порабощать людей [/FLOOD]
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как быстро узнать исть ли данная строка в массиве из строк? Alex Cones Общие вопросы Delphi 10 27.08.2009 08:57
Массив строк Siluet Помощь студентам 2 30.05.2009 07:38
Массив строк С++ Nina+ Помощь студентам 1 01.04.2009 23:22
Масив строк => строка Rio309 Помощь студентам 4 22.03.2008 15:35