Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/StringArraySortieren/Musterlösung: Unterschied zwischen den Versionen

K (hat „Ckurs2009/StringArraySortieren/Musterlösung“ nach „Ckurs/StringArraySortieren/Musterlösung“ verschoben: Aufgaben sind Kurs übergreifend nutzbar)
(ML an neue Aufgabe angepasst)
Zeile 1: Zeile 1:
#include <string.h>
+
<pre>
#include <stdlib.h>
+
#include <stdio.h>
#include <stdio.h>
+
#include <stdlib.h>
+
 
int cmp_lex(void *a, void *b)
+
void mem_copy(char *dest, char *src, int len) {
{ return strcmp(*(char **)a,*(char **)b);}
+
    int i;
+
    for (i=0; i<len; i++) {
int cmp_std(void *a, void *b)
+
        *dest++ = *src++;
{int len_diff=strlen(*(char **)a)-strlen(*(char **)b);
+
    }
  if(len_diff) return len_diff;
+
}
  else
+
 
     return strcmp(*(char **)a,*(char **)b);}
+
int str_compare(char *a, char *b) {
+
    int diff;
int main(int argc,char **argv)
+
   
{ int i;
+
    do {
+
        char ca = *a++;
  if(argc < 2) {
+
        char cb = *b++;
    printf("Program sortiert Argumente der Komandozeile\n");
+
 
    printf("Usage: %s arg1 arg2 ...\n",argv[0]);
+
        if ((ca == '\0') && (cb = '\0'))
    return 0;}
+
            return 0;
+
 
  qsort(argv+1,argc-1,sizeof(char *),&cmp_lex);
+
        diff = ca-cb;
 
+
     } while (diff == 0);
  printf("Argumente sortiert nach lex. Ordnung\n");
+
   
+
    return diff;
  for(i=1;i<argc;i++) printf("%s\n",argv[i]);
+
}
  printf("Argumente sortiert nach Standart- Ordnung\n");
+
 
  qsort(argv+1,argc-1,sizeof(char *),&cmp_std);
+
void sort(char **list, int length) {
  for(i=1;i<argc;i++) printf("%s\n",argv[i]);
+
    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>

Version vom 17. September 2010, 18: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;
}