PDA

Просмотр полной версии : Работа со строками



Колядин Максим
16.01.2007, 22:05
Да, задачи на первый-то взгляд лёгкие....
1)Дан текст. Посчитать количество слов, заканчивающихся на заданную букву и перенести их в другую строку, написав через запятую. Вывести полученную строку на экран.
2)Дан текст. Посчитать количество слов в тексте.
Заранее спасибо.

Хыиуду
16.01.2007, 22:44
Откуда берется текст? Из файла, из Мемо, откуда-то еще?
Как разбивать строку на слова - где-то обсуждалось (по-моему Cade спрашивал, а Somewhere отвечал).
стало быть (изображаю общую идею, думаю, разберешься)


wordscount:=0;
zadannayabukva='A';
for i:=0 или 1 (в зависимости от нумерации) to textlinescount do
begin
s:=text[i];
s_out:='';
while s<>'' do
begin
s1:={взять слово из строки s};
inc(wordscount);
if s1[length(s1)]=zadannayabukva
then s_out:=s_out+s1+', ';
end;
delete(s_out,length(s_out),2);// удаляем последнюю запятую и пробел
writeln(s_out);
end;

Колядин Максим
17.01.2007, 03:00
Спасибо, разобрался

Oleg_Rus
29.01.2007, 02:50
Хыиуду, а не проще ли будет заранее поставить условие сравнения с Zadannayabukva

if (text[i]=Zadannayabukva) and (Text[i+1] = ' ') Then
// забивай в в строку

мне кажется так будет и проще, и понятней...

Хыиуду
30.01.2007, 10:20
Можно и так. Тогда надо еще проверять не только пробел, но и некоторые знаки препинания. Например, запятая или точка после буквенного символа однозначно указывает на окончание слова, а дефис или апостроф являются частями слова (кое-где, д'Артаньян). И еще сделать проверку, не является ли буква последней в строке. А то ведь падать будет с эксепшном...
if (text[i]=Zadannayabukva) and
((i=length(text)) or (pos(Text[i+1],' !?.,')<>0)
Then // забивай в в строку

Oleg_Rus
01.02.2007, 04:30
Точно... так будет и красивее и более наглядно

Хыиуду
01.02.2007, 10:11
Точно... так будет и красивее и более наглядно
Ну... не скажу, что красивее и более наглядно, зато правильнее и более надежно :)