Консультация № 178105
29.04.2010, 19:16
0.00 руб.
0 9 1
Добрый день, прошу оказать помощь в реализации следующей задачи:

В тексте определить количество слов, имеющих более двух одинаковых букв в слове.

Вывести на экран эти слова. Удалить из исходного текста лишние (одинаковые) буквы из слова, оставив только одну.

Спасибо.

Обсуждение

Неизвестный
29.04.2010, 22:14
общий
geschutze:
слово 'мама'
одинаковые буквы 'а', 'м' , каждая - по 2 раза ==> слово не выводим
удаляем одинаковые буквы, остается 'ма' (в задаче не сказано, что удалять надо только из слов, удовлетворяющих условию повторяемости букв).
Приведите, пожалуйста, примеры.
И что делать с текстом после удаления "лишних (одинаковых) букв из слов"?
Неизвестный
29.04.2010, 22:21
общий
amnick:
Да нет, по-моему, в задании однозначно: лишние удалить, следовательно, "ма"
Но пример, конечно, не помешает
Неизвестный
29.04.2010, 22:48
общий
Boriss:
Да я вроде так и написал, что по заданию надо оставлять 'ма'.
А может быть, надо искать и обрабатывать слова типа 'мамммма' (убираем лишнее повторение, получаем 'мама'). А вот еще хорошее слово 'длинношеее' (животное жираф).
Это я пытаюсь какой-то смысл в задаче найти. И примеры прошу, чтобы уточнить, а то сколько раз условие задания перевирали.
Неизвестный
29.04.2010, 22:50
общий
amnick:
Согласен с Вами полностью!
Неизвестный
30.04.2010, 00:38
общий
Например, дан текст: "qsdasds qsdss as gfs sdss"; слов содержащих более 2 одинаковых букв в нём 3; удаляем лишние буквы, результат: "qsda qsd as gfs sd".



Неизвестный
30.04.2010, 04:45
общий
это ответ
Здравствуйте, geschutze.
Код решения в приложении.

Приложение:
Uses
Crt;
Const
teSt = 'qsdasds qsdss as gfs sdss';
Spaces : Set of Char = [' ', Chr(9)];
Var
count, i: Byte;
RSt, St: String;
ChSet: Set of Char;
flag: Boolean;

begin
ClrScr;
Write('Type text:');
Readln(St);
{
St := teSt;
}
RSt := '';
count := 0;
i := 1;
While (i <= Length(St)) do begin
if (St[i] in Spaces) then begin
ChSet := [];
flag := false;
RSt := RSt + St[i];
end else begin
if (St[i] in ChSet) then begin
if not flag then begin
inc(count);
flag := true;
end;
end else begin
Include(ChSet, St[i]);
RSt := RSt + St[i];
end;
end;
Inc(i);
end;
if (count > 0) then begin
Writeln('Found ', count, ' words.');
Writeln('Result: ', RSt);
end else
Writeln('Not found.');
Write('Done. Press any key...');
readkey;
end.
5
Спасибо!
Неизвестный
30.04.2010, 09:22
общий
geschutze:
У нас тут при обсуждении вариантов ответа родился такой вопрос: Что должно получиться, если ввелено слово 'мамммма'? 'ма' или 'мама'? Вам решать
Неизвестный
30.04.2010, 14:35
общий
Andrew Kovalchuk
А вы не могли бы решить задачу не используя вторую строку, удаляя лишние буквы с помощью Delete()?
Неизвестный
30.04.2010, 15:52
общий
geschutze:
Цитата: 326831
А вы не могли бы решить задачу не используя вторую строку, удаляя лишние буквы с помощью Delete()?
Мог бы :)
Вариант прилагаю:
Код:
Uses
Crt;
Const
teSt = 'qsdasds qsdss as gfs sdss';
Spaces : Set of Char = [' ', Chr(9)];
Var
count, i: Byte;
St: String;
ChSet: Set of Char;
flag: Boolean;

begin
ClrScr;
Write('Type text: ');
Readln(St);
{
St := teSt;
}
count := 0;
i := 1;
While (i <= Length(St)) do begin
if (St[i] in Spaces) then begin
ChSet := [];
flag := false;
Inc(i);
end else begin
if (St[i] in ChSet) then begin
Delete(St, i, 1);
if not flag then begin
inc(count);
flag := true;
end;
end else begin
Include(ChSet, St[i]);
Inc(i);
end;
end;
end;
if (count > 0) then begin
Writeln('Found ', count, ' words.');
Writeln('Result: ', St);
end else
Writeln('Not found.');
Write('Done. Press any key...');
readkey;
end.
Форма ответа