Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с текстом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Студентик13
Здесь строковая задача. т.е работа с текстом. Я эту тему не понял. Помогите кто сможет.
Заранее благодарен.
Дана последовательность слов. Напечатать все слова, предварительно выполнив преобразования их по правилу:
а) заменить во всех словах первую букву заглавной;
б) в словах наибольшей длины удалить среднюю (средние) букву;
в) заменить в каждом слове первую встреченную букву “а” на “о”.
Ozzя
Вытаскиваешь слова в массив
http://forum.pascalnet.ru/index.php?s=&sh...indpost&p=28059
а) UpCase
в)
Код
for i:=1 to length(s) do
if s[i]='a' then
begin
  s[i]:='o';
  break;
end;
Студентик13
OzzЯ а поподробней можно я не оракул чтоб видеть то чего нет.
volvo
Тебе дали ссылку на готовые функции разбиения строки на слова. В чем теперь у тебя проблема, объясни...
APAL
Здесь не нужно быть оракулом, достаточно воспользваться поиском по форуму и заглянуть в раздел F.A.Q.!
Студентик13
Я искал по форуму, в программах которые я видел не было "заменить в каждом слове первую встреченную букву “а” на “о”." и не было ") в словах наибольшей длины удалить среднюю (средние) букву;"
Код
program WordsToArray;
uses crt;
type TArray=array[1..100]of string;

{функция заполняет возвращает массив mas словами из строки s}
procedure GetWords(s:string; var mas:TArray);
var i,j:shortint;
begin
while pos('  ',s)<>0 do delete(s,pos('  ',s),1);
if s[1]=' ' then delete(s,1,1);
if s[length(s)]=' ' then delete(s,length(s),1); {удаляем лишние пробелы}

i:=1;
for j:=1 to length(s) do
if s[j]<>' ' then mas[i]:=mas[i]+s[j] else if i<>high(mas) then inc(i); {заполняем массив словами из строки}
end;

var s:string;
mas:TArray;i:shortint;
begin
clrscr;
write('> ');
readln(s);
GetWords(s,mas);
for i:=1 to high(mas) do if mas[i]<>'' then writeln(i,' - ',mas[i]);
end.

и здесь ничего подобного не было и в других прогах тоже blink.gif blink.gif blink.gif
volvo
Ты сразу за все-то не хватайся... По очереди...

Разбей строку на слова, пройди по ним, и замени в каждом их них первую букву на заглавную.. Алгоритм - в моем модуле в "FAQ: Строки"...

Потом берись за вторую часть... Ты же создал десяток тем и СРАЗУ хочешь все сделать. Так не бывает...
Студентик13
Да так не бывает но нижно и попробовать.
Студентик13
Хорошо оформленно и все понятно
Цитата
Модуль для работы со строками

Содержит ряд функций для работы со строковыми переменными. Функции разбиты на насколько групп:

Функции проверки:
Функции, начинающиеся с Is... предназначены для проверки принадлежности символов строки к определенным группам. Все они возвращают логическое значение (True/False). Функция Is... проверяет, "является ли символ Ch..."
Студентик13
Код
Const
  s:String = ('N');
var
N:string;
count:text;
Begin
  write('Ââåäèòå òåêñò');
  Read(N);
  Count:=GetWords(s,['-', ';', '.']);
  WriteLn(Count, ' words found ...');
End.

Прога у меня не работает говорит что ошибка в Count:=GetWords(s,['-', ';', '.']);
не понимаю,возможно можно упростить тут
Код
Const
s:String = ('N');
var
N:string;

если да то как не помню но вроде что-то простое unsure.gif unsure.gif
volvo
Цитата
Прога у меня не работает говорит что ошибка
А где у тебя собственно функция GetWords описана? Ты ничего не сделал: ни модуль подключить, ни саму функцию скопировать не догадался. Как же ты хочешь, чтобы это работало?
Студентик13
Код
Const
  maxWords = 100;
Type
  TWords = Array[1 .. maxWords] Of String;
Function GetWords(s: String; Var mas: TWords): Byte;
var
count:text;
TWords:stringe;
Begin
write('string');
read(TWords);
  Count:=GetWords(TWords,['-', ';', '.']);
  WriteLn(Count, ' words found ...');
End.

Может так точно не знаю но не работает
Гость
Ты для начала книжку какую-нибудь почитай по Паскалю, а то, знаешь ли, тебе надо все с САМЫХ основ объяснять...
Студентик13
Память плохая dry.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.