Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2014, 17:55   #1
sharamamburum
 
Регистрация: 14.12.2014
Сообщений: 6
По умолчанию Более двух одинаковых букв в слове (pascal)

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

Никак не могу реализовать, получается только для двух одинаковых. Не одну неделю уже пытаюсь

Вот так я проверяю наличие более двух одинаковых букв

Код:
for i:=1 to length(s) do
 for j:=i + 1 to length(s) do
  if s[i] = s[j] then inc(k);
if k > 1 then writeln(s);
выполнить все условия задачи не получается.
sharamamburum вне форума Ответить с цитированием
Старый 14.12.2014, 18:06   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

"длинношеяя жирафа" - сколько одинаковых букв?
Smogg вне форума Ответить с цитированием
Старый 14.12.2014, 19:00   #3
sharamamburum
 
Регистрация: 14.12.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
"длинношеяя жирафа" - сколько одинаковых букв?
В обоих словах встречается максимум две одинаковые буквы, ничего не изменится. Вот например "длинношеее животное" превратиться в
"длинноше животное"
sharamamburum вне форума Ответить с цитированием
Старый 14.12.2014, 19:58   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Да, не правильный пример придумал. Тогда так: "ддллиинноошшееяя".
Smogg вне форума Ответить с цитированием
Старый 14.12.2014, 20:47   #5
sharamamburum
 
Регистрация: 14.12.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
Да, не правильный пример придумал. Тогда так: "ддллиинноошшееяя".
Там ведь тоже нет трех повторяющихся букв, прога должна пропустить слово
sharamamburum вне форума Ответить с цитированием
Старый 14.12.2014, 20:58   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для удобства разбей слова на массив: http://www.programmersforum.ru/showt...369#post398369
Затем опиши функцию, которая будет в цикле находить и заменять спаренные буквы.
Что-то вроде:
Код:
var c:char; i:integer;
begin
 for c:='а' to 'я' do begin
  i:=pos(c+c,s);
  while i<>0 do begin
   delete(s,i,1);
   i:=pos(c+c,s);
  end;
 end;
 Вернуть s
end;
P.S. Хотя ИМХО даже на массив можно не разбивать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.12.2014, 20:39   #7
sharamamburum
 
Регистрация: 14.12.2014
Сообщений: 6
По умолчанию

Задача все еще актуальна... Нужна помощь
sharamamburum вне форума Ответить с цитированием
Старый 19.12.2014, 09:03   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

sharamamburum, если я правильно понял задание, буквы могут быть расположены НЕ ПОДРЯД?
например, слово окорок должно измениться и превратиться в окрк ?
а если таких букв несколько?
Например, слово стереокатастрофическая в какое превращается?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2014, 20:55   #9
sharamamburum
 
Регистрация: 14.12.2014
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
sharamamburum, если я правильно понял задание, буквы могут быть расположены НЕ ПОДРЯД?
например, слово окорок должно измениться и превратиться в окрк ?
а если таких букв несколько?
Например, слово стереокатастрофическая в какое превращается?
да, буквы могут идти не подряд. А слово "стереокатастрофическая" превратится в "стерокарафичя", т.е. даже если наборов несколько, то обрабатывается каждый.

Последний раз редактировалось sharamamburum; 19.12.2014 в 20:58.
sharamamburum вне форума Ответить с цитированием
Старый 19.12.2014, 22:58   #10
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

разбиваете на массив слов, слово приводите к нижнему регистру, создаете массив int[256] (количество символов в стандартной кодировке), обнуляете его, потом пробегаете по слову и инкрементите элемент массива, соответствующий символу:
Код:
int smb[256] = {0};
string sOrig = "OкороK";
string sLowered = "окорок";
for (int i = 0; i < sLowered .size(); i++){
   smb[(unsigned char)sLowered [i]] ++;
}
так получили количество соответствующих букв в слове.

теперь устанавливаем, что букву следует обрабатывать:
Код:
for (int i =0; i <256; i++)
{
   if (smb[i] >2) 
      smb[i] = 0;
   else
      smb[i] = 99999;
}
объявляем результирующую строку, тестим нормализованную строку, и если надо добавляем символ из исходной в результат:
Код:
string sResult;
for (int i = 0; i < sLowered.size(); i++)
{
   if (smb[(unsigned char)sLowered[i]] >= 0)
      sResult += sOrig[i];
   smb[(unsigned char)sLowered[i]]--;
}
В паскаль сами конвертите, ибо полагаю, что нужен алгоритм, а не копипаста.

Последний раз редактировалось Smogg; 19.12.2014 в 23:02.
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комбинации букв в слове Palto Помощь студентам 4 24.04.2014 18:24
статистика букв в одном слове Тамерлан Абилов Помощь студентам 6 03.03.2013 19:01
(Turbo Pascal)Составить программу, выводящую сочетание из двух букв... Swetic Помощь студентам 6 21.01.2013 08:27
Перебор заглавных букв в слове =LeonZone= Общие вопросы Delphi 8 02.11.2007 14:59