Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » C Sortieren eines 2-dimensionalen Feldes

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.07.2007, 23:19 Uhr
f0re



Hallo, hätte mal eine Frage, ich habe ein 2-dimensionales Feld, in jeder Zeile steht Text und ich möchte diese alphabetisch sortieren. kann mir hier jemand dazu eine funktion schreiben? danke !
--
" Diese Datei kann nicht gelöscht werden. Eine Datei mit dem angegebenen Namen ist bereits vorhanden. Geben sie einen anderen Dateinamen ein " --> w|nd0ws stYle 0utch >.<
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.07.2007, 00:13 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int qsort_strcmp(void const *p, void const *q) {
  return strcmp(*(char const**)p, *(char const**)q);
}

int main(void) {
  char const *foo[] = { "Dies", "ist", "ein", "unsortierter", "Satz" };
  int i;

  qsort(foo, 5, sizeof(char const*), &qsort_strcmp);

  for(i = 0; i < 5; ++i) {
    puts(foo[i]);
  }

  return 0;
}


strcmp ist allerdings case-sensitive, das heißt, "Satz" kommt vor "ein". Wenns Groß-Kleinschreibung nicht beachten soll, im BSD-API gibts ne Funktion strcasecmp - wenn du das verwenden kannst, nimm das, ansonsten musstes dir im Zweifel kurz nachcoden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.07.2007, 12:25 Uhr
f0re



mein programm hängt sich auf, habe deine idee eingebaut, könntet ihr mir sagen was ihc falsch gemacht habe? habe hier die main und sortierfunktion gepostet, denn die anderen sind denk ich unwichtig

C++:
int main(int argc, char *argv[])
{
    FILE *eingabe=NULL;
    FILE *ausgabe=NULL;
    char eing[60];
    char ausg[60];
    char eingfeld[36][110];
    char ausgfeld[36][110];
    DateinamenBestimmen(argv, eing, ausg);

    eingabe=fopen(eing,"r");
    if(eingabe==NULL)
    {
        fprintf(stderr,"Fehler bei der Öffnung der Eingabedatei");
        exit(1);
    }

    ausgabe=fopen(ausg,"w");
    if(ausgabe==NULL)
    {
        fprintf(stderr,"Fehler bei der Öffnung der Ausgabedatei");
        exit(1);
    }

    eingabef(eingabe, eingfeld);
    verarbeitung(eingfeld, ausgfeld);

    qsort(ausgfeld, 36, sizeof(char), &qsort_strcmp);

    ausgabef(ausgabe, ausgfeld);
    fcloseall();

    return 0;
}

int qsort_strcmp(const void *s1, const void *s2)
{
    return strcmp(*(char const**)s1, *(char const**)s2);
}

--
" Diese Datei kann nicht gelöscht werden. Eine Datei mit dem angegebenen Namen ist bereits vorhanden. Geben sie einen anderen Dateinamen ein " --> w|nd0ws stYle 0utch >.<

Dieser Post wurde am 05.07.2007 um 12:26 Uhr von f0re editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.07.2007, 22:26 Uhr
0xdeadbeef
Gott
(Operator)


Hiermit:

C++:
char ausgfeld[36][110];


ist es etwas anders, weil das kein Zeigerarray ist:

C++:
#include <stdio.h>
#include <stdlib.h>

int qsort_strcmp(void const *p, void const *q) {
  return strcmp((char const *)p, (char const *)q);
}

int main(void) {
  int i;
  char foo[5][20] = { "foo", "bar", "baz", "qux", "quux" };

  qsort(foo, 5, sizeof(char[20]), qsort_strcmp);

  for(i = 0; i < 5; ++i) {
    puts(foo[i]);
  }

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.07.2007, 13:18 Uhr
f0re



danke für die Hilfe, jetz funktioniert das programm
--
" Diese Datei kann nicht gelöscht werden. Eine Datei mit dem angegebenen Namen ist bereits vorhanden. Geben sie einen anderen Dateinamen ein " --> w|nd0ws stYle 0utch >.<
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: