Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Строки

Автор: R@f 20.11.2005 16:42

Люди!!! Плиз. Не могу сообразить, как вывести все слова данной строки в столбик?

Автор: Altair 20.11.2005 16:42

раскрыть глаза пошире
http://forum.pascal.net.ru/index.php?showtopic=6972

Автор: R@f 20.11.2005 18:04

Есть такая задача. "Дан текстовый файл F. Переписать в другой файл G все строки из файла F, начинающиеся с символа S, где символ S задается пользователем." Проблема в том, что прога ещё и переписывает все нулевые строки. Как от них избавиться?

Автор: Altair 20.11.2005 18:05

Цитата
Проблема в том, что прога ещё и переписывает все нулевые строки

допутсим ты читаешь строку s.
переписывай ее только в том случае если s<>''

а вернее так.
пусть строка c, и задан символ s.
if s[1]=s then пишем строку куда надо

Автор: R@f 20.11.2005 18:34

ОГРОМАДНЕЙШЕЕ СПАСИБО!!! В принципе, я так и думал, но не мог записать. Писал то s[1]<>0, то s<>’ ‘. Ещё раз thank you. А вот со словами в столбик я не разобрался. Там слишком мудрёные способы. А у меня то задачка совсем простенькая: «Дана строка символов. Получить все слова, расположенные после первого и до второго двоеточия. Если второго двоеточия нет, то получить все слова после первого двоеточия до конца строки.» С двоеточиями я разобрался, там всё путём. А вот как эти долбанные слова в столбик вывести, я не могу допереть.
Пишу

repeat 
word1:=copy(words,1,pos(‘ ‘,words));
delete(words,1,pos(‘ ’,words));
writeln(word1);
until pos(‘ ‘,words)=0;
writeln (words);

И он мне выводит в столбик, но и ещё пробелы в столбик выводит. Как их удалить?
Помоги, горю, может свой вариант есть?

Автор: Altair 20.11.2005 18:36

Цитата
он мне выводит в столбик, но и ещё пробелы в столбик выводит

до
writeln (words);
напии
while pos(' ',words) <>0 do delete (words,pos(' ',words),1);
проверь только я не перепутал по памяти параметры у pos... (может наоборот не помню)

или у тебя прбелы как слова выводятсчя? тогда опять
if (words<>'') and (words<>' ') then writeln(words);

Автор: volvo 20.11.2005 18:40

Или так:

repeat
word1:=copy(words,1,pos(' ',words));
delete(words,1,pos(' ',words));

while(words[1] = ' ') do delete(words, 1, 1); { <-- !!! }

writeln(word1);
until pos(' ',words)=0;
writeln (words);

Автор: R@f 20.11.2005 19:44

Вау, круто! Вариант volvo попёр. Но небольшая проблема: если в строке после последнего слова напечатать более 1 пробела, то прога виснит. Можно было плюнуть на это, может препод при проверке и не наколится на это. Но наш препод любую недоработанную прогу повешает. Может есть какие-то соображения?

Автор: volvo 20.11.2005 19:49

Цитата
если в строке после последнего слова напечатать более 1 пробела, то прога виснит.

yes2.gif Само собой... Удаляй все ведомые пробелы еще до начала обработки:
  { Вот так }
while words[length(words)] = ' ' do
delete(words, length(words), 1);

repeat
word1:=copy(words,1,pos(' ',words));
delete(words,1,pos(' ',words));
while(words[1] = ' ') do delete(words, 1, 1);
writeln(word1);
until pos(' ',words)=0;
writeln (words);

Автор: R@f 20.11.2005 20:00

Мать моя – женщина!!! Работает блин!!! Я от радости прыгаю до потолка! Спасибо, мужики! Супер форум! Удачи всем!