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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2014, 13:23   #1
yurgeno
 
Регистрация: 22.04.2014
Сообщений: 8
Вопрос Пермутации символов в строке.

Добрый день, подскажите, каким образом можно найти все пермутации символов в строке. Длина строки может быть любой (от 1 символа). Повторяющиеся символы считаются за два разных символа. Думаю, существуют какие-либо общие решения. Буду благодарен за примеры и за ссылки "где почитать". Речь идет именно о пермутации, то есть о изменении порядка символов в строке.
Пример: дана строка "abc".
Вывод:
"abc"
"acb"
"bac"
"bca"
"cab"
"cba"

Последний раз редактировалось yurgeno; 22.04.2014 в 13:55.
yurgeno вне форума Ответить с цитированием
Старый 22.04.2014, 13:41   #2
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

а сколько символов?
число символов возводишь в степень, равную длине строки
SAMOUCHKA вне форума Ответить с цитированием
Старый 22.04.2014, 13:45   #3
yurgeno
 
Регистрация: 22.04.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
а сколько символов?
число символов возводишь в степень, равную длине строки
Число символов может быть любым, общее число пермутаций как посчитать, это ясно , необходимо найти и вывести эти самые пермутации. Проще говоря это перебор всех вариантов порядка символов в строке.

Последний раз редактировалось yurgeno; 22.04.2014 в 13:55.
yurgeno вне форума Ответить с цитированием
Старый 22.04.2014, 14:55   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.04.2014, 15:05   #5
yurgeno
 
Регистрация: 22.04.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так устроит?
Эх, чрезвычайно не силен в паскале, спасибо
yurgeno вне форума Ответить с цитированием
Старый 22.04.2014, 16:19   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Элементарно, Ватсон )
Код:
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string value;
	cout << "Enter string: ";
	cin >> value;
	cout << "Displaying all possible permutations: ";
	sort(value.begin(), value.end());
	do cout << value << " ";
	while (next_permutation(value.begin(), value.end()));
}
Son Of Pain вне форума Ответить с цитированием
Старый 22.04.2014, 16:33   #7
yurgeno
 
Регистрация: 22.04.2014
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Элементарно, Ватсон )
Код:
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string value;
	cout << "Enter string: ";
	cin >> value;
	cout << "Displaying all possible permutations: ";
	sort(value.begin(), value.end());
	do cout << value << " ";
	while (next_permutation(value.begin(), value.end()));
}
спасибо больше, поразбираюсь
yurgeno вне форума Ответить с цитированием
Старый 22.04.2014, 18:09   #8
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

как поменять местами два элемента массива?
напиши
вот у тебя допустим abc ,а надо cba
как сделать так?
после того как это напишешь,будем дальше разбираться
а пока сделай это хотя бы

p.s. ну и словечко ...пермутации какие-то) ужас)
буквы ведь в слове всего навсего меняются местами? нет? не . Я дурак не правильно выражаюсь ,ониж это....символы в строке пермутируются.Вот так вот!

Последний раз редактировалось alekopoko; 22.04.2014 в 19:19.
alekopoko вне форума Ответить с цитированием
Старый 23.04.2014, 02:43   #9
yurgeno
 
Регистрация: 22.04.2014
Сообщений: 8
По умолчанию

Код:
#include <stdio.h>

void swap(char *a, char *b) {
 char t = *a; *a = *b; *b = t; 
}

void permute(char *a, int i, int n) {
   if (i == (n-1)) printf("%s\n", a);
   else {
     for (int j = i; j < n; j++) {
       swap((a+i), (a+j));
       permute(a, i+1, n);
       swap((a+i), (a+j));
     }
  }}

char s[100];
strcpy(s, "ABCD");
permute(s, 0, strlen(s));
Проблема решена.
если кому интересно еще )
yurgeno вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
азаработать программу Подсчета числа символов указанного типа в любой заданной строке символов . slava5170 Общие вопросы C/C++ 4 03.11.2013 02:18
Поиск символов в строке Стремящийся C# (си шарп) 4 10.06.2012 22:28
подсчёт символов с в строке Proger_1 Общие вопросы C/C++ 10 13.03.2010 20:42
Удаление символов в строке makc101 Помощь студентам 1 09.12.2009 23:01
Преобразование символов в строке ZeroQl Помощь студентам 12 17.02.2009 23:06