You are not logged in.


jenssch

Neuer Clubber

  • "jenssch" started this thread

Posts: 9

Location: Döbeln

Occupation: Studi

  • Send private message

1

Friday, May 12th 2006, 8:03am

Titel gändert: Zeichenketten alphabetisch sortieren

ich grüße euch!
ich benötige ein programm, das n zeichenketten alphabetisch sortiert und die anzahl der zeichenketten vorher abfragt. ich habe keine richtige idee für die lösung dieses problems.helft mir bitte! ich bin auch für beispielprogramme dankbar.

ich danke euch schon mal im voraus!

exnase

Active Clubbers

Posts: 696

Location: STD

Occupation: Nicht mehr Student

  • Send private message

2

Friday, May 12th 2006, 2:30pm

Hi
hab dir da mal was fertiggemacht. Allerdings solltest du da noch zur Sicherheit ein paar Prüfungen der Stringlänge einfügen (getline statt gets). Ausserdem musst du mal schauen ob bei dir das getc() nötig ist.

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// maximale Stringlaenge
#define MAXSTRLEN 256

// compare 2 strings
int compstring(const void *p1, const void *p2)
{
  return strcmp((*(char**)p1),(*(char**)p2));
}

int main()
{
  int stranz=0,i;
  char** strings;
  
  // Anzahl der Strings einlesen
  printf("Anzahl Strings: ");
  scanf("%d",&stranz);
  getc(stdin);

  // Array für Strings anlegen
  strings=(char**)calloc(stranz,sizeof(char*));
  
  // Strings allozieren und eingeben lassen
  for (i=0;i<stranz;++i) {
    strings[i]=(char*)calloc(MAXSTRLEN,sizeof(char));
    printf("String %d: ",i);
    gets(strings[i]);
  }
  printf("Sortiere Strings ....");
  // Array sortieren
  qsort((void*)strings,stranz,sizeof(char*),compstring);
  printf("fertig\n\n");

  // Strings ausgeben und freigeben
  for (i=0;i<stranz;++i) {
    printf("\"%s\"\n",strings[i]);
    free(strings[i]);
  }

  // Array freigeben
  free(strings);
  
  return 0;
}


mfg exnase

P.S: Da hab ich gleich noch ne Frage (an Jockel? ;)).
Ich wollte eigentlich direkt getline nehmen, aber da ichs unter Linux geschrieben hab und da getline sonderbarerweise ein

Source code

1
#define _GNU_SOURCE
(siehe man 3 getline) verlangte hab ichs gelassen.
Was soll dieses define da?
Wer nichts weiß und weiß, dass er nichts weiß, weiß mehr als einer, der nichts weiß und nicht weiß, dass er nichts weiß!
Meine Software hat keine Fehler. Sie entwickelt nur manchmal zufällige Features!

Jockel

Ehrenmitglied mit Auszeichnung

Posts: 3,223

Location: 5<<0xE|5<<6|5>>2<<4

  • Send private message

3

Friday, May 12th 2006, 2:36pm

Hallo!

Kenn ich so nicht. Ich benutz, wenn überhaupt, eher fgets oder readline.

mfg

Jockel
P = NP.

jenssch

Neuer Clubber

  • "jenssch" started this thread

Posts: 9

Location: Döbeln

Occupation: Studi

  • Send private message

4

Tuesday, May 16th 2006, 3:50pm

danke für deine hilfe. mit deinem programm hab ich die zeiger erst richtig begriffen.

jenssch

Neuer Clubber

  • "jenssch" started this thread

Posts: 9

Location: Döbeln

Occupation: Studi

  • Send private message

5

Tuesday, May 16th 2006, 3:57pm

worin liegt eigentlich der unterschied zwischen malloc und calloc?

Jockel

Ehrenmitglied mit Auszeichnung

Posts: 3,223

Location: 5<<0xE|5<<6|5>>2<<4

  • Send private message

6

Tuesday, May 16th 2006, 4:03pm

Hallo!

$ man malloc
$ man calloc

Quoted


NAME
calloc, malloc, free, realloc - Allocate and free dynamic
memory

SYNOPSIS
#include <stdlib.h>

void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);

DESCRIPTION
calloc() allocates memory for an array of nmemb elements
of size bytes each and returns a pointer to the allocated
memory. The memory is set to zero.

malloc() allocates size bytes and returns a pointer to the
allocated memory. The memory is not cleared.

...


Nutze die Dinge, die Gott dir geschenkt hat - zb Man-Pages.

mfg

Jockel
P = NP.

Jockel

Ehrenmitglied mit Auszeichnung

Posts: 3,223

Location: 5<<0xE|5<<6|5>>2<<4

  • Send private message

7

Tuesday, May 16th 2006, 4:08pm

Hallo!

@exnase: Ach so, bevor ichs vergesse:
Das _GNU_SOURCE muss dahin, weil getline eine GNU Extension ist, also kein C Standard (steht im Übrigen auch in der man page drin).

mfg

Jockel
P = NP.

exnase

Active Clubbers

Posts: 696

Location: STD

Occupation: Nicht mehr Student

  • Send private message

8

Tuesday, May 16th 2006, 4:33pm

Hm unter Windows gibts das auch.
Aber da halt ohne _GNU_SOURCE dachte immer das gehört zu den Standardheadern.

mfg exnase
Wer nichts weiß und weiß, dass er nichts weiß, weiß mehr als einer, der nichts weiß und nicht weiß, dass er nichts weiß!
Meine Software hat keine Fehler. Sie entwickelt nur manchmal zufällige Features!

Rate this thread