C-Kurs/StringArraySortieren/Musterlösung: Unterschied zwischen den Versionen
Mutax (Diskussion | Beiträge) K (hat „Ckurs2009/StringArraySortieren/Musterlösung“ nach „Ckurs/StringArraySortieren/Musterlösung“ verschoben: Aufgaben sind Kurs übergreifend nutzbar) |
PaulG (Diskussion | Beiträge) K (verschob „Ckurs/StringArraySortieren/Musterlösung“ nach „C-Kurs/StringArraySortieren/Musterlösung“) |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | + | <pre> | |
− | + | #include <stdio.h> | |
− | + | #include <stdlib.h> | |
− | + | ||
− | + | void mem_copy(char *dest, char *src, int len) { | |
− | + | int i; | |
− | + | for (i=0; i<len; i++) { | |
− | + | *dest++ = *src++; | |
− | + | } | |
− | + | } | |
− | + | ||
− | + | int str_compare(char *a, char *b) { | |
− | + | int diff; | |
− | + | ||
− | + | do { | |
− | + | char ca = *a++; | |
− | + | char cb = *b++; | |
− | + | ||
− | + | if ((ca == '\0') && (cb = '\0')) | |
− | + | return 0; | |
− | + | ||
− | + | diff = ca-cb; | |
− | + | } while (diff == 0); | |
− | + | ||
− | + | return diff; | |
− | + | } | |
− | + | ||
− | + | void sort(char **list, int length) { | |
− | + | int i, j; | |
− | + | for (i=0; i<length-1; i++) { | |
+ | for (j=0; j<length-i-1; j++) { | ||
+ | if (str_compare(list[j], list[j+1]) > 0) { | ||
+ | char *tmp = list[j]; | ||
+ | list[j] = list[j+1]; | ||
+ | list[j+1] = tmp; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | int main(int argc, char *argv[]) { | ||
+ | char **list = malloc(argc * sizeof(char *)); | ||
+ | mem_copy((char*)list, (char*)argv, argc * sizeof(char *)); | ||
+ | sort(list, argc); | ||
+ | |||
+ | int i; | ||
+ | for (i=0; i<argc; i++) { | ||
+ | printf("%02d: %s\n", (i+1), list[i]); | ||
+ | } | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </pre> |
Aktuelle Version vom 5. März 2013, 17:37 Uhr
#include <stdio.h> #include <stdlib.h> void mem_copy(char *dest, char *src, int len) { int i; for (i=0; i<len; i++) { *dest++ = *src++; } } int str_compare(char *a, char *b) { int diff; do { char ca = *a++; char cb = *b++; if ((ca == '\0') && (cb = '\0')) return 0; diff = ca-cb; } while (diff == 0); return diff; } void sort(char **list, int length) { int i, j; for (i=0; i<length-1; i++) { for (j=0; j<length-i-1; j++) { if (str_compare(list[j], list[j+1]) > 0) { char *tmp = list[j]; list[j] = list[j+1]; list[j+1] = tmp; } } } } int main(int argc, char *argv[]) { char **list = malloc(argc * sizeof(char *)); mem_copy((char*)list, (char*)argv, argc * sizeof(char *)); sort(list, argc); int i; for (i=0; i<argc; i++) { printf("%02d: %s\n", (i+1), list[i]); } return 0; }