Bei Verwendung von Typ char **, da die Lösung mit fester Größe bereits veröffentlicht wurde, dachte ich, ich würde mit einer dynamischen, \ 0-beendeten Lösung klingeln, die mit Arrays unterschiedlicher Größe funktioniert. Wenn es möglich ist, die Arrays zu beenden, können h und w weggelassen werden. Diese Funktion kann das h und w herausfinden. Natürlich kann es geändert werden, um h und w zu unterstützen, aber die Mächte, die das sind, würde ich eher zurück zur Arbeit, die ihr Reich finanziert, anstatt freie Hilfe zu geben.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
/* rotate_array
w h
**p _______ **q ___
|A B C D|\0 ===> |E A|\0
h |E F G H|\0 ==> |F B|\0 w
NULL----- |G C|\0
|H D|\0
NULL-
*/
char **rotate_array(char **p) {
int w,h,hh;
char **q;
for (w=0;p[0][w];w++);
for (hh=0;p[hh];hh++);
if (!(q = malloc(w * sizeof q))) {
perror ("malloc");
exit (1);
} fprintf (stderr,"made it\n");
for (w=0;p[0][w];w++) {
if (!(q[w] = malloc(hh))) {
perror ("malloc");
exit (1);
} for (h=0;h<hh;h++) {
q[w][hh-h-1] = p[h][w];
} q[w][h]='\0';
} q[w]=NULL;
return q;
} void free_array(char **p) {
int h;
for (h=0;p[h];h++) {
free (p[h]);
} free (p);
}
// main
int main (int argc, char **argv) {
int h;
char *p[3]={"ABCD","EFGH",NULL};
char **q;
for (h=0;p[h];h++) {
printf ("%s\n",p[h]);
} printf ("\n");
q = rotate_array (p);
for (h=0;q[h];h++) {
printf ("%s\n",q[h]);
} free_array (q);
return 0;
}
möglich Duplikat [Wie eine Matrix 90 Grad drehen, ohne zusätzlichen Raum mit?] (Http://stackoverflow.com/questions/3488691/how-to-rotate-a-matrix-90-degrees -ohne-irgendeinen-zusätzlichen-Platz zu verwenden) – Vijay