2 woerter aus einem string im vektor alphabetisch ausgeben wie?



  • 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
    hier mein bisheriges ergebnis:

    #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){

    /* ab hier weiss ich nicht weiter */
    }



  • Deine Funktion ausgeben hat einen Fehler, sie gibt jedes Stringstück das aus Zeichen besteht, nicht nur das erste und das letzte wort.
    Ich habe dir mal meine Lösung hier dazu gestellt.
    Die Ausgaben in den while Schleifen dienen nur dem debuggen, sie sollten auskommentiert sein wenn die Funktion benutzt wird.
    Das erste und letzte Wort findest du in den beiden Strings FirstWord, Lastword;

    ? was soll die Funktion alpha den machen ??

    int ausgeben(char *Buffer,char *First, char *Last);
    {
    #define STRINGLEN 256
    char Buffer[STRINGLEN+1];// das +1 ist eine Marotte
                             // von mir um den üblichen Fehler zu vermeiden das für
                             // die schließende Null kein Platz mehr da ist.
    char FirstWord[STRINGLEN+1];
    char LastWord[STRINGLEN+1];
    printf("Bitte geben Sie nun einen Text ein:\n"); /* Eingabeaufforderung */
    gets(Buffer); /* liest alles ein */ 
    ausgeben(Buffer,FirstWord,LastWord);
    printf ("\nErgebnis: Erstes Word: %s, Letztes Wort: %s",FirstWord,LastWord);
    }
    
    int ausgeben(char *Buffer,char *First, char *Last)
    {
    int i=0; // Index in Eingabestring
    int j=0; // Hilfsvariable
    First[0]=0x00; //Die beiden Ausgabestrings als leer definieren
    Last[0]=0x00;
    while (0!=Buffer[i])  // Finde erstes Wort
    {
      if (0!=isalpha(Buffer[i]))
      {
       printf("%c",Buffer[i]); // for debugging only
       First[j]=Buffer[i];
       j++;
       i++;
      }
     else 
     break;
    }
    First[j]=0x00; // Schreiben des Stringendes
    j=0;
    while (0!=Buffer[i])
    {
      if (0!=isalpha(Buffer[i]))
      {
       printf("%c",Buffer[i]); // for debugging only
       Last[j]=Buffer[i]; // Kopiere in den String Last
       j++;
       i++;
      }
      else 
      { // Noch ein Trennzeichen gefunden.
        // Wenn das letzte Zeichen in einem String ein Trennzeichen ist
        // Ist Last leer
       i++; // Gehe zum nächsten Zeichen in der Eingabe
       j=0; // Setze den Index für Last zurück
      }
    }
    Last[j]=0x00;// Schreiben des Stringendes
    return PASS;
    }
    

    🙂


Anmelden zum Antworten