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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2012, 16:30   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Как получить первые буквы из слов в предложении?

Добрый день! Нужно из строковой переменной, в которую передается некий текст, получить только первые буквы всех слов этого предложения и сформировать из них одно слово. Например, пусть в этой переменной есть предложение: "Вася пришел домой с покупками". В итоге должно получиться одно слово: "Впдсп" и т.д. Прошу помощи.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 08.11.2012, 16:35   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

класс
Код:
t: TSringList
temp: string = '';

t.Delimiter:= ' '
t.text:= 'Вася пришел домой с покупками'

for i:=0 to t.count-1 do
 temp:= temp + t[i][1]
Как то так.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось artemavd; 08.11.2012 в 22:03.
raxp вне форума Ответить с цитированием
Старый 08.11.2012, 16:39   #3
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
var
s,ss:string;
begin
s:='Вася пришел домой с покупками';
if pos(' ',s)<0 then exit;
while pos(' ',s)>0 do
begin
ss:=ss+copy(s,1,pos(' ',s)-1);
delete(s,1,pos(' ',s)+1);
end;
ss:=ss+copy(s,1,length(s));
Быдло код вероятно не будет работать или не правильно будет..
Кольша вне форума Ответить с цитированием
Старый 08.11.2012, 17:41   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
result:='';
// проверить что первый символ не пробел и добавить в этом случае
if (length(s)>0) and (s[1]<>' ') then result:=s[1];
//либо немного повыкрутасничить s:=' ' +s; и теперь первый всегда пробел
for j:=1 to length(s)-1 do
  if (s[j]=' ') and (s[j+1]<>' ') then result:=result+s[j+1];
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 08.11.2012 в 17:46.
evg_m вне форума Ответить с цитированием
Старый 08.11.2012, 20:20   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Присоединяюсь к Raxp-у.
Только:
Код:
for i:=0 to t.count-1 do temp:= temp + copy(t[i],1,1);
Это если строка пуста чтоб ошибку не дало.
И, дружище, код то спецтегом выделяй, пример дурной подаешь таки
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2012, 22:02   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
класс t: TSringList
temp: string = '';

t.Delimiter:= ' '
t.text:= 'Вася пришел домой с покупками'

for i:=0 to t.count-1 do
temp:= temp + t[i][1]
Как то так.
Этот код отрабатывает только для первого слова. Первая буква берется, но с остальными словами не работает.
А вот код Кольша, который я переделал под себя:
Код:
   s:=NewText.Text;
   while Pos(' ',s) > 0 do
   begin
     Rezult.Text:=Rezult.Text + Copy(s,1,Pos(' ',s) - 1);
     Delete(s,1,Pos(' ',s) + 1);
   end;
   Rezult.Text:=Rezult.Text + Copy(s,1,Length(s));
Но он просто объединяет все слова в одно слово и самую первую букву в этом слове делает заглавной.

Прошу помощи
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

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

Неправда:
Код:
uses    classes,
  SysUtils;
var t: TStringList;
  i:byte;
begin
t:=TStringList.Create;
t.DelimitedText:= 'Вася пришел домой с покупками';
for i:=0 to t.count-1 do write(copy(t[i],1,1));
readln;
end.
Все там работает как надо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2012, 22:27   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А мне больше по душе чуть переделанный код, что evg_m предложил
Код:
  s1:='Вася пришел домой с покупками';
  s2:='';
  for i:=Length(s1) downto 2 do if s1[i-1]=' ' then s2:=s1[i]+s2;
  s2:=s1[1]+s2;
Если возможно несколько пробелов подряд, то
Код:
for i:=Length(s1) downto 2 do if (s1[i-1]=' ') and (s1[i]<>' ') then s2:=s1[i]+s2;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 08.11.2012 в 22:29.
Аватар вне форума Ответить с цитированием
Старый 08.11.2012, 22:39   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
И, дружище, код то спецтегом выделяй, пример дурной подаешь таки
так я и не писал код, так получилось что кодом вышло
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 08.11.2012, 23:14   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Stilet, а если не через консоль?
Аватар, а что у тебя идет такое после then?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 08.11.2012 в 23:24.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
счёт заданной буквы в предложении tanya61043 Помощь студентам 1 28.05.2012 11:37
как сделать перестановку слов в веденном предложении не повторяя одинаковые перестановки luybeznov Помощь студентам 3 22.05.2012 00:28
объясните как убрать в предложении из каждого слова все повторяющиеся буквы? st555 Общие вопросы C/C++ 0 29.12.2010 06:31
В заданной строке символов заменить все первые буквы слов на заглавные NV-salt Общие вопросы C/C++ 4 05.04.2009 18:41
Как из строки получить первые три символа experts91 Помощь студентам 2 07.04.2008 21:58