Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > INC для строки


Автор: jonimimoni 1.9.2015, 17:48
Добрый день.
Необходимо реализовать функцию INC но для СТРОКИ. 
Например: необходимо получить все возможные комбинации (размещение из n по k, где n=33, k=5 ) из массива ALPHABET='абвгдеёжзийклмнопрстуфхцчшщъыьэюя'  без повторений. n и k могут меняться.
Возможно INC не самый точный аналог, но устранить повторения - дело плёвое.
Код не привожу в силу его несостоятельности.

Автор: Poseidon 1.9.2015, 17:57
Цитата(jonimimoni @  1.9.2015,  17:48 Найти цитируемый пост)
Необходимо реализовать функцию INC но для СТРОКИ
Что делает Inc для целых - известно. Что должно делать для строк? Следующую букву возвращать?

Автор: jonimimoni 1.9.2015, 18:06
Цитата(Poseidon @ 1.9.2015,  17:57)
Следующую букву возвращать?

например есть строка ирнпавю, после, необходимо получить ирнпавя, но следующее увеличение даёт уже увеличение предпоследней буквы ирнпавя и тут начинается цирк, индексы теряются - функция ломается... Я уже не говорю про первый символ в слове.

Автор: Poseidon 1.9.2015, 19:13
Код

procedure IncRusStr(var S: string);
var
  ChangeChr: Char;
  Index: Word;
begin
  Index := S.Length-1;

  while (S.Chars[Index] = 'Я') or (S.Chars[Index] = 'я') do
    Dec(Index);

  ChangeChr := S.Chars[Index];
  ChangeChr := Succ(ChangeChr);

  S := Copy(S, 1, Index) + ChangeChr + Copy(S, Index+2, S.Length-Index-1);
end;

Что делать в случае строки 'яяяяя' и т.п. придумай сам. Так же следует отдельно обрабатывать букву 'ё', если она нужна.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)