Ordnen von Namen nach dem 2.Buchstaben
-
Hallo!
Es geht um folgendes Bsp:
Schreiben Sie ein Programm, mit dem Sie 10 Namen mit max. 15 Zeichen eingeben können. Ordnen Sie diese nach dem 2.Buchstaben und geben Sie das Resultat am Bildschirm aus.
Meine Lösung ist find ich viel zu lang und daher stellt sich die Frage
ob man bzw. wie man das Problem einfacher lösen könnte?#include<stdio.h> int main() /*@swordfish: Zufrieden? ;-)*/ { char cNamen1[15]; char cNamen2[15]; char cNamen3[15]; char cNamen4[15]; char cNamen5[15]; char cNamen6[15]; char cNamen7[15]; char cNamen8[15]; char cNamen9[15]; char cNamen10[15]; char cSortier[11]; char Zwischen; int i,j; char *p_cP1,char *p_cP2,char *p_cP3,char *p_cP4,char *p_cP5,char *p_cP6,char *p_cP7,char *p_cP8,char *p_cP9,char *p_cP10; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen1); p_cP1=&cNamen1[1]; cSortier[0]=*p_cP1; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen2); p_cP2=&cNamen2[1]; cSortier[1]=*p_cP2; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen3); p_cP3=&cNamen3[1]; cSortier[2]=*p_cP3; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen4); p_cP4=&cNamen4[1]; cSortier[3]=*p_cP4; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen5); p_cP5=&cNamen5[1]; cSortier[4]=*p_cP5; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen6); p_cP6=&cNamen6[1]; cSortier[5]=*p_cP6; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen7); p_cP7=&cNamen7[1]; cSortier[6]=*p_cP7; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen8); p_cP8=&cNamen8[1]; cSortier[7]=*p_cP8; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen9); p_cP9=&cNamen9[1]; cSortier[8]=*p_cP9; printf("Geben Sie bitte den String ein:\n"); scanf("%s",cNamen10); p_cP10=&cNamen10[1]; cSortier[9]=*p_cP10; for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if (cSortier[i]>cSortier[j]) { Zwischen=cSortier[j]; cSortier[j]=cSortier[i]; cSortier[i]=Zwischen; } } } for(i=0;i<10;i++) { if(cSortier[i]==(*p_cP1)) { printf("%s\n",cNamen1); } if(cSortier[i]==(*p_cP2)) { printf("%s\n",cNamen2); } if(cSortier[i]==(*p_cP3)) { printf("%s\n",cNamen3); } if(cSortier[i]==(*p_cP4)) { printf("%s\n",cNamen4); } if(cSortier[i]==(*p_cP5)) { printf("%s\n",cNamen5); } if(cSortier[i]==(*p_cP6)) { printf("%s\n",cNamen6); } if(cSortier[i]==(*p_cP7)) { printf("%s\n",cNamen7); } if(cSortier[i]==(*p_cP8)) { printf("%s\n",cNamen8); } if(cSortier[i]==(*p_cP9)) { printf("%s\n",cNamen9); } if(cSortier[i]==(*p_cP10)) { printf("%s\n",cNamen10); } } }
-
char cNamen[10][15];
-
@TactX: Ja, ein mehrdimensionales Array wäre eine Möglichkeit!
Gute Idee.Danke!!!
-
#include <stdio.h> int main(void) /*** in C muss void da stehen, wenn du keine parameter hast ***/ { /*** das hier sollte wohl ein 2-dimensionales array sein ***/ char cNamen1[15]; ... char cSortier[11]; char Zwischen; int i, j; /*** das hier sollte wohl ein array sein ***/ char *p_cP1, *p_cP2, *p_cP3, *p_cP4, *p_cP5, *p_cP6, *p_cP7, *p_cP8, *p_cP9, *p_cP10; /*** das hier sollte wohl eine for-schleife sein ***/ printf("Geben Sie bitte den String ein:\n"); scanf("%s", cNamen1); p_cP1 = &cNamen1[1]; cSortier[0] = *p_cP1; ... /* dieser sortieralgorithmus hat eine quadratische laufzeit, was man natuerlich besser machen kann. * aber er ist richtig implementiert (wobei am ende i == j == 9 und das bewirkt nichts, also reicht schon i < 9) */ for (i = 0; i < 10; i++) { for (j = i + 1; j < 10; j++) { if (cSortier[i] > cSortier[j]) { Zwischen = cSortier[j]; cSortier[j] = cSortier[i]; cSortier[i] = Zwischen; } } } /*** waere p_cP ein array, haettest du dir hier einiges sparen koennen ***/ for (i = 0; i < 10; i++) { if (cSortier[i] == (*p_cP1)) printf("%s\n", cNamen1); ... } /*** bei einer nicht-void funktion sollte schon noch ein return stehen ***/ return 0; }
-
Mini1982 schrieb:
int main() /*@swordfish: Zufrieden? ;-)*/
c.crackwitz schrieb:
int main(void) /*** in C muss void da stehen, wenn du keine parameter hast ***/
*lol*
c.crackwitz schrieb:
/* ... */ /*** bei einer nicht-void funktion sollte schon noch ein return stehen ***/ return 0; }
ISO/IEC 9899:1999 schrieb:
5.1.2.2.3 Program termination
1 If the return type of the main function is a type compatible with int, a return from the
initial call to the main function is equivalent to calling the exit function with the value
returned by the main function as its argument; reaching the } that terminates the
main function returns a value of 0. If the return type is not compatible with int, the
termination status returned to the host environment is unspecified.Greetz, Swordfish
-
Swordfish schrieb:
ISO/IEC 9899:1999 schrieb:
5.1.2.2.3 Program termination
reaching the } that terminates the
main function returns a value of 0.vielleicht sollten sich das mal alle merken, die sonst immer so auf das 'int' vor main pochen....
-
net schrieb:
vielleicht sollten sich das mal alle merken, die sonst immer so auf das 'int' vor main pochen....
Entschuldige, ich steh im Moment auf einer sehr, sehr dicken Leitung. Was willst du uns (mir?) damit sagen?
Greetz, Swordfish
-
Swordfish schrieb:
net schrieb:
vielleicht sollten sich das mal alle merken, die sonst immer so auf das 'int' vor main pochen....
Entschuldige, ich steh im Moment auf einer sehr, sehr dicken Leitung. Was willst du uns (mir?) damit sagen?
Greetz, Swordfishna steht doch da: main return'd eine 0 am ende. das tut sie auch wenn sie 'void' statt int heisst...