Помощь - Поиск - Пользователи - Календарь
Полная версия: Строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
R@f
Люди!!! Плиз. Не могу сообразить, как вывести все слова данной строки в столбик?
Altair
раскрыть глаза пошире
http://forum.pascal.net.ru/index.php?showtopic=6972
R@f
Есть такая задача. "Дан текстовый файл F. Переписать в другой файл G все строки из файла F, начинающиеся с символа S, где символ S задается пользователем." Проблема в том, что прога ещё и переписывает все нулевые строки. Как от них избавиться?
Altair
Цитата
Проблема в том, что прога ещё и переписывает все нулевые строки

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

а вернее так.
пусть строка c, и задан символ s.
if s[1]=s then пишем строку куда надо
R@f
ОГРОМАДНЕЙШЕЕ СПАСИБО!!! В принципе, я так и думал, но не мог записать. Писал то 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
Цитата
он мне выводит в столбик, но и ещё пробелы в столбик выводит

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

или у тебя прбелы как слова выводятсчя? тогда опять
if (words<>'') and (words<>' ') then writeln(words);
volvo
Или так:
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
Вау, круто! Вариант volvo попёр. Но небольшая проблема: если в строке после последнего слова напечатать более 1 пробела, то прога виснит. Можно было плюнуть на это, может препод при проверке и не наколится на это. Но наш препод любую недоработанную прогу повешает. Может есть какие-то соображения?
volvo
Цитата
если в строке после последнего слова напечатать более 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
Мать моя – женщина!!! Работает блин!!! Я от радости прыгаю до потолка! Спасибо, мужики! Супер форум! Удачи всем!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.