Mam do napisania program, który po wylosowaniu liter (dużych i małych) ma je posortować funkcją qsort w każdym wierszu w tablicy w taki sposób:
PRZED: bBaA
PO: AaBb
Oto mój kod:
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
char losuj();
int cmp();
int main()
{
int i,j;
int ilosc_lancuchow, dlugosc_napisu;
char **tab;
ilosc_lancuchow=1;
dlugosc_napisu=5;
//char **tab=(char**)malloc(100*15*sizeof(char*));
tab=(char**)malloc(ilosc_lancuchow*dlugosc_napisu*sizeof(char*));
for(i=0;i<ilosc_lancuchow;i++)
{
tab[i]=(char*)malloc(dlugosc_napisu*sizeof(char)); // tab[i] !!! !!! !!! !!!
}
for(i=0;i<ilosc_lancuchow;i++)
{
for(j=0;j<dlugosc_napisu;j++)
{
tab[i][j]=losuj();
printf("%c",tab[i][j]);
}
printf("
");
}
for(i=0;i<ilosc_lancuchow;i++)
qsort(tab[i],dlugosc_napisu,sizeof(char),cmp);
printf("
");
for(i=0;i<ilosc_lancuchow;i++)
{
for(j=0;j<dlugosc_napisu;j++)
{
printf("%c",tab[i][j]);
}
printf("
");
}
for(i=0;i<ilosc_lancuchow;i++)
{
free(tab[i]);
}
free(tab);
}
char losuj()
{
int j;
static int i=1;
char znak;
if(i)
{
srand(time(0));
i=0;
}
znak=rand()%25+65;
j=rand()%2;
if(j)
{
znak+=(97-65);
}
return znak;
}
int cmp(const void *a, const void *b)
{
char c,d;
c=*(char*)a;
d=*(char*)b;
if(c>=65 && c<=90)
{
if(d>=65 && d<=90)
{
if(c>d)
return 1;
else if(c<d)
return -1;
else
return 0;
}
else
{
if(d-c==32)
return -1;
}
}
else
{
if(d>=65 && d<=90)
{
if(c-d==32)
return 1;
}
else
{
if(c>d)
return 1;
else if(c<d)
return -1;
else
return 0;
}
}
}
Za wskazówki będę niezmiernie wdzięczna.