C Buchstaben sortieren

Another Day

Cadet 2nd Year
Registriert
Dez. 2007
Beiträge
22
Hallo CB,

habe da mal eine Frage zum programmieren.
Und zwar muss ich einen String mit Buchstaben sortieren.


So steht beispielsweise in Datei.txt:

zahjut

muss aber hinterher korrekt ausgegeben werden:

ahjtuz


also nach dem Alphabet sortiert.
Habe da was von Bubble Sort gehört. Aber so richtig funktionieren wills nicht.
Beim ausgeben habe ich da auch so meine Probleme...


Könnt ihr mir vllt. helfen?


Danke.
 
Warum sortierst du nicht nach den asci Werten der Buchstaben?

Kombiniert mit dem bubble sort Algorithmus solltest du doch ans Ziel kommen. :)
 
ja, nur die Frage ist, wie kann ich den Wert vorher und das Ergebnis nachher ausgeben?
für C habe ich da keine lösung bisher gefunden.

Das schreiben in die datei ist erstmal zweitrangig.
 
Du speicherst den Anfangzustand in einen String.

Danach legst du eine Kopie davon an und greifst auf die einzelnen Elemente zu.

Sortiert wird mir bubble sort. :)
 
also mal langsam, bislang sieht mein code so aus:

Code:
#include "stdio.h"
#include "string.h"

main () 
{
	char satz[200];
	printf("\nBitte geben Sie einen Satz ein\n");
	gets(satz);
	printf("\n%s", satz);			
}


das mit dem bubble sort habe ich noch nicht ganz verstanden.
finde nur code für vb oder c++.
 
Wie weit bist du eigentlich mit C?

Dir fehlen noch ein paar Grundlagen und die würde ich nachlesen.

Sagen dir Kontrollstrukturen/Vektoren etwas?
 
so.. sortiert aber nur ziffern und keine buchstaben :(

Code:
#include <stdafx.h>
#include <stdio.h>

#define FALSE 0
#define TRUE 1
#define listLength ( sizeof list / sizeof list[0] )

char list[] = {  56, 23, 1, 89, 58, 20, 125, 86, 3 };

void bubbleSort (char list[], char len);

int main ()
{
	bubbleSort (list, listLength);

	{
		char i;
		for (i = 0; i < listLength; ++i)
		printf ("list[%d] = %d\n", i, list[i]);
	}

	return 0;
}


 void bubbleSort (char list[], char len)
 {
	char sorted = FALSE;

	while (!sorted)
	{
		char j;
		sorted = TRUE;
		for (j = 0; j < len - 1; j++)
		{
			if (list[j] > list[j + 1])
			{
				char t;
				sorted = FALSE;
				t = list[j];
				list[j] = list[j + 1];
				list[j + 1] = t;
			}
		}
	}
 }
 
Ich würde es in c++ anders machen aber egal.

Wenn es mit Zahlen funktioniert bist du doch fast fertig.

Einfach eine String in asci Zahlen umwandeln und am Ende wieder zurück.

Nur aufpassen, dass du keine Großbuschstaben hast.
 
Fertig.. najaj...
ich muss es ja noch in eine Datei schreiben und aus einer Datei lesen.
edit: der code ist c? nicht c++..
 
Sagen dir Kontrollstrukturen/Vektoren etwas?
Ein Vektor ist ein Klassentyp und Klassen gibt's in C nicht.

Ich würde vorschlagen, dass du 'ne Sortierfunktion aus der Standardbibliothek nimmst. Die ist optimiert und hat keine Fehler.
Mein Vorschlag:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int mycmp(const void *a, const void *b) {
	char x = * (char *) a;
	char y = * (char *) b;
	return (x < y) ? -1 : (x > y) ? 1 : 0;
}

int main(int argc, char **argv) {
	if(argc != 3) {
		fprintf(stderr, "Usage: %s input.txt output.txt", argv[0]);
		exit(EXIT_FAILURE);
	}
	
	FILE *input, *output;
	input = fopen(argv[1], "r");
	output = fopen(argv[2], "w+");
	if(input == NULL) {
		fprintf(stderr, "Could not open %s", argv[1]);
		exit(EXIT_FAILURE);
	}
	if(output == NULL) {
		fprintf(stderr, "Could not open %s", argv[2]);
		exit(EXIT_FAILURE);
	}
	
	int max_line_length;
	printf("Enter maximum line length: ");
	scanf("%d", &max_line_length);
	max_line_length += 2; // for additional '\0' and '\n'
	char buffer[max_line_length];
	while(fgets(buffer, max_line_length, input) ) {
		qsort(buffer, sizeof(buffer)-2, sizeof(char), mycmp); // -2: do not sort '\0' and '\n'
		fputs(buffer, output);
	}
	
	exit(EXIT_SUCCESS);
}
 
Zuletzt bearbeitet:
Zurück
Oben