string im vektor alphabetisch ausgeben

justuslopas

Grünschnabel
hallo.
ich versuche einen beliebien text in einem vektor zu speichern. wenn ich eine zahl oder ein sonderzeichen eingebe soll als worttrenner zu verstehen sein. dann wollte ich das alphabetische erste und das letzte wort auszugeben. beispiel:
eingabe: affe44hund9"Zaun\0
ausgabe: alphabetisch erste wort: affe
alphabetisch letzte wort: Zaun

kann mir da jemand helfen?
 
Die aufgabe kannst du in mehrere Schritte aufteilen, dann wird es einfacher:

1. Zerlegen des Strings in Substrings. Anscheinend interessieren dich nur Wörter, also kannst du alles andere als Trenner betrachten und ignorieren. Wenn du deinen String zeichenweise von Anfang bis Ende durchsuchst, kannst du das mit der Funktion isalpha() elegant lösen, die ein Zeichen darauf testet, ob es ein Buchstabe ist oder etwas anderes (Zahl oder Satzzeichen).
Gefundene Wörter könnstest du in einen std::vector von std::strings reintun.

2. Sortieren der gefundenen Wörter. Wenn du wie vorgeschlagen den Text durchsucht und alle Wörter in den Vector gepackt hast, kannst du ihn mit std::sort alphabetisch sortieren.

Noch ein Hinweis: Noch eleganter wäre es, im ersten Schritt gar keinen std::vector von std::strings zu verwenden, sondern ein std::set oder ein std::multiset. Das sind sozusagen selbstsortierende Container. Alles, was du dort rein steckst, wird schon beim Einfügen an die richtige Stelle gepackt.
 
guter tip

danke für deinen tip.
nur leider weiss ich nicht wie ich den eingegeben text so aufteile das ich ein substring bekomme, wenn ich dies mache bekomme ich dann einen zweiten vektor, besser gesagt, brauch ich einen zweiten vektor. hier mal das was ich bisher geschrieben hab: erklärung: lese irgendwas ein, und gebe die wörter aus, zeichen und zahlen sind worttrenner, nur muss ich noch die wörter sortieren in wie schon oben geschrieben.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define FELDER 256

void ausgeben(char cvekt[],int ianz);
void alpha(char cvekt[],int ianz);

main(){
char cvektor[FELDER],*cs;
int i,ianz,ibuch;

printf("Bitte geben Sie nun einen Text ein:\n"); /* Eingabeaufforderung */
fflush(stdin); /* Eingebestrom loeschen */
fgets(cvektor,FELDER,stdin); /* liest alles ein */
ianz=strlen(cvektor); /* anzahl der vektorelemente */
ausgeben(cvektor,ianz); /* aufrufen der funktion ausgeben */
alpha(cvektor,ianz); /* aufrufen der funktion alpha */
}

void ausgeben(char cvekt[],int ianz){
int ibuch,i;
char *czeiger;

czeiger=cvekt;
ibuch=isalpha(*czeiger); /* ungleich null, wenn nur buchstaben */
i=0;
printf("\nAusgabe:\n");
while(i<ianz){

while(ibuch!=0){
printf("%c",*czeiger);
czeiger++;
i++;
ibuch=isalpha(*czeiger);
}
while(ibuch==0){
czeiger++;
i++;
ibuch=isalpha(*czeiger);
}
printf("\n");
}
}

void alpha(char cvekt[],int ianz){

/* ? */
printf("Alphabetisch erste Wort:\n");
printf("Alphabetisch letzte Wort:\n");
}
 
Musst du das Ganze mit C machen? Wenn möglich, verwende C++, das macht Einiges einfacher.

Und bitte:
 

Anhänge

  • codetags.gif
    codetags.gif
    7,5 KB · Aufrufe: 91
ja in c

ja ich muss das in c machen, kenne bisher nur c, bin grad dabei es in der schule zu lernen, und mein lehrer möchte dies nun so haben.
 
Zurück