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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2014, 22:09   #1
yurgeno
 
Регистрация: 22.04.2014
Сообщений: 8
По умолчанию Вывод в массив из рекурсии

Добрый день, имеется рекурсивный код, задача которого определить все возможные перестановки символов в данной строке.
Код C
Код:
void swap (char *x, char *y)
{
    char temp;
    temp = *x;
    *x = *y;
    *y = temp;
}
void permute(char *a, int i, int n) {
   int j; 
   if (i == n)
     printf("%s\n", a);
   else
   {
        for (j = i; j <= n; j++)
       {
          swap((a+i), (a+j));
          permute(a, i+1, n);
          swap((a+i), (a+j)); 
       }
   }
   
}
int main(int argc, char** argv){
 
char str[] = "abc";
permute(str,0,2);
 
return (EXIT_SUCCESS);
}
Каким образом можно сделать так, чтобы получаемые строки не выводились на экран, а помещались в массив ?
yurgeno вне форума Ответить с цитированием
Старый 23.04.2014, 22:24   #2
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

вывод в массив?)
может "ввод в массив" или "вывод массива" ?)
массив строк это символьный массив указателей
допустим так:
Код:
char*strr[i];
alekopoko вне форума Ответить с цитированием
Старый 23.04.2014, 22:25   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Исользовать STL.
vector<string> v;
Ну и вместо printf("%s\n", a); записывать с v эту "а", приведя ее в string.
Это как предложение. Тогда str нуно делать string а не массив символов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.04.2014, 22:30   #4
yurgeno
 
Регистрация: 22.04.2014
Сообщений: 8
По умолчанию

Программа необходимо написать на С. Нужно, чтобы именно получался массив строк, содержащий все перестановки символов исходной строки. Фишка в том, что необходимо эти строки упорядочить по алфавиту. Не сохраняя все в массив, не представляю, как это сделать. Подозреваю, что через глобальную переменную каким-то образом. Возможно, проще заменить рекурсию циклом и сделать так, чтобы функция permute возвращала массив. Но пока ничего не получается.
yurgeno вне форума Ответить с цитированием
Старый 23.04.2014, 22:48   #5
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

Цитата:
Нужно, чтобы именно получался массив строк, содержащий все перестановки символов исходной строки.
Код:
	char*str[10];//массив строк
	char*a="savek";
	char*b="vasek";
	str[0]=a;
	str[1]=b;
	printf("%s\n",str[0]);
	printf("%s\n",str[1]);
теперь то понятно как сделать массив строк?
а потом перебираешь полученные элементы массива строк и сортируешь их по возрастанию
сортировать по алфавиту можно определяя код ASCII первого символа строки
http://book.itep.ru/10/ascii.htm
чтобы получить код ASCII надо преобразовать символ char в int
пример:
Код:
char a[]="savek";
printf(" == %d",a[0]);
т.е. строка у которой первый символ будет минимальным числовым кодом ASCII,является первым элементом отсортированного массива строк по алфавиту

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

Цитата:
Сообщение от alekopoko Посмотреть сообщение
Код:
	char*str[10];//массив строк
	char*a="savek";
	char*b="vasek";
	str[0]=a;
	str[1]=b;
	printf("%s\n",str[0]);
	printf("%s\n",str[1]);
теперь то понятно как сделать массив строк?
Спасибо, поэкспериментирую
yurgeno вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод структуры дерева без рекурсии Alexander X Общие вопросы C/C++ 1 25.11.2013 20:59
Двумерный массив (вывод, главная диагональ) Alexbmgn Помощь студентам 0 26.12.2011 22:37
Вывод на экран массив (ассемблер) Стас_с Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.07.2011 00:11
Двумерный массив вывод элементов змейкой egor67 Паскаль, Turbo Pascal, PascalABC.NET 4 08.04.2011 17:15
Динамический массив. Неверный вывод элементов. sir.andrey Паскаль, Turbo Pascal, PascalABC.NET 7 27.02.2010 05:23