Ahoj, potřebuji pomoc s razeni retezcu podle abeceda, vsechno uz mam hotove, akorat to razeni tech retezcu z pole nemuzu delat, nevim kde je vlastne chyba, je to tu nekdo ochotny se podivat do kodu anebo vyresit za me?
moje zadani je že ze vstupu mám načitat retezec, pak seradit do abeceda ( retezec "adcb" -> "abcd") pak vypocitam pocet permutance a vypsat, tohle ja mam ale treba kdyz mam retezec ABCD anebo AABB, BBAA tak ten program uz nevypise spravne, chtel jsem dat ty stringy do pole pak pomoci strcmp/memcmp rezadit postupne.
Třeba permutace AAB = Nromalni permutace AAB, ABA, AAB, ABA, BAA, BAA = Podle abeceda AAB, AAB, ABA, ABA, BAA, BAA
chyba je v metode rezeni();
Děkuji mockrat
/*
* File: DU3.c
* Author: trandtha
*
* Created on April 25, 2012, 2:48 PM
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int faktorial(int);
void vypis(char);
void volejVypis(char*, int, int);
void perm(char*, int, int);
void sort(char*);
void print(char*, int*, int);
void ulozDoPolechar(char*);
void sezareni();
char *pole[10000];
char *pole2[10000];
int count = 0;
int delkaText = 0;
int delkaPerm = 0;
int main(int argc, char** argv) {
char *text, temp;
text = malloc(1024 * sizeof (char));
int delka, i, delka2, delka3;
long long pocetPermutace = 1;
if (text != NULL) {
scanf("%s", text);
delka = strlen(text);
printf("---Vysledky---\n");
printf("Delka retezce: %d\n", delka);
printf("Vstupni retezec: \"%s\"\n", text);
sort(text);
printf("Serazeno: \"%s\"\n", text);
delka2 = strlen(text);
printf("Pocet permutaci: %d", faktorial(delka2));
delkaPerm = faktorial(delka2);
delkaText = delka2;
perm(text, 0, delka2);
sezareni();
//permutace(text, delka2);
//int v[] = {1, 2, 3};
//permute(text, v, 0, sizeof(v)/sizeof(int));
} else {
printf("CHYBA!!!");
}
system("pause");
return 0;
}
void sezareni(){
char word1[delkaText];
int i, y, k, a;
for(k = 0; k < delkaPerm; k++){
for(i = 0; i < delkaPerm; i++){
for(y = 1; y < delkaPerm; y++){
if((memcmp(pole[i], pole[y], delkaText) < 0)){
//printf("pole y \n\"%s\"", &pole[y]);
//printf("pole y \n\"%s\"", &pole[i]);
strcpy(word1, &pole[i]);
strcpy(&pole[i], &pole[y]);
strcpy(&pole[y], word1);
}
}
}
}
for(i = 0; i < delkaPerm; i++){
strcpy(word1, pole[a]);
printf("\n\"%s\"", &word1);
}
}
void ulozDoPole(char *text){
int word[delkaText];
strcpy( &pole[count], text );
printf("\n\"%s\"", &pole[count]);
count = count+1;
}
void perm(char *text, int k, int n){
char t, d[10], s;
int i;
if(k == n){
ulozDoPole(text);
//
//printf("\n\"%s\"", text);
return;
}else {
for(i = k; i < n; i++)
{
t = text[i];
text[i] = text[k];
text[k] = t;
strcpy(d, text);
perm(d, k + 1, n);
}
}
}
int faktorial(int index){
int i;
long long result = 1;
for(i = 1; i < index+1; i++){
result = result * (index+1-i);
}
return result;
}
void sort(char*text){
int i,j, delka;
char temp;
delka = strlen(text);
for (i=0; i<delka-1; i++)
{
for (j=i+1; j<delka; j++)
{
if (text[i] > text[j])
{
temp = text[i];
text[i] = text[j];
text[j] = temp;
}
}
}
}