[C/C++] datentypen als ,,Wort'' ausgeben mit C

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von _zippo^, 24. November 2009 .

  1. 24. November 2009
    datentypen als ,,Wort'' ausgeben mit C

    hey dudes,
    folgendes - aufgabe ist es, dass ich in einer konsolenanwendung eine zeichenkette eingebe, bestehend aus wörtern, zahlen, sonderzeichen und den keywords(z.B. Boole, int, else, if und so...)
    diese sollen dann je nach ihrer ,,klasse'' (wörter zahlen..) gesammelt ausgegeben werden.

    zahlen, buchstaben und sonderzeichen sind kein problem,
    habe das mit getchar() gemacht, dass er meine eingabe quasi in den ascii umwandelt, dann mit if schleifen die eingabe durch geht und dann quasi erkennt ob der ascii in dem bestimmten bereich der z.b. zahlen liegt und dann ausgibt "Zahl: 8"

    jetzt habe ich ein problem, ich möchte, dass aus meinem string heraus auch erkannt wird, wenn ich bespielsweise ,,else'' eingebe, dass dieses dann als 'keyword' markiert und ausgegeben wird...

    gedacht hätte ich, dass ich 2 große schleifen mache, in der ersten geht das programm die wörter durch, und schaut ob solch ein keyword eingegeben wurde, die zweite macht besteht dann aus den if schleifen, die das machen was ich oben schonmal geschrieben habe mit dem getchar()...

    daher nun die frage - kann (und vor allem wie) ich die keywords im quelltext festlegen, die dann von der zweiten if schleife ausgeschlossen werden und als keywords erkannt werden ???

    vielen dank schonmal...
     
  2. 24. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    Also...

    Wenn du den eingegebenen String (vom User) des erste mal durchgehst, schauste einfach, ob da von dir gesuchte Wörter drinn vorkommen (einfache if-Abfrage). Hierzu würd ich eine eigene Funktion schreiben, die es dir ermöglicht, einzelne Wörter mit teilen aus einem String zu vergleichen. Dann weißt du schon mal, welche schlüsselwörter drinn vorkommen... wie du die aber dann beim sortieren am besten ignorierst weiß ich atm noch nicht x)

    wenn ich heut noch Zeit habe (was unwahrscheinlich ist) werd ich mich damit mal genauer befassen ^^

    mfg
    xXsoureXx

    EDIT:

    0oops.. mir ist grad aufgefallen, dass du das gar nicht in einen String speicherst, sondern einzelnt einliest (gechar()) und dann wahrscheinlich direkt auswertest & sortierst ?!
    Du musst das irgendwie in einen string speichern, damit du kontrollieren kannst, ob es sich um ein schlüsselwort handelt - einzelne Buchstaben/Zeichen sind ja schließlich keine Wörter ...
     
  3. 24. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    ja bisher gibt er die verschiedenen buchstaben nur einzeln aus^^
    damit er die zeichen zwischen 2 leerzeichen erkennt muss ich die in einem array speichern oder?

    aber das ist ja erstmal nebensächlich, ich frage mich ob c eine feste eigabe erkennen kann,
    quasi sowas wie

    x=getchar()
    if (x == else)
    {
    printf("Sie haben ein Keyword eingegeben %c", x);
    x=getchar();
    }

    gibt es da in der art eine möglichkeit? wäre denk ich das einfachste^^

    ps. eigene fkt schreiben is eher schlecht, bin noch anfänger und lerne erst mit schleifen und arrays umzugehen
     
  4. 24. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    Hoi,

    wie du vielleicht schon weißt, gibt es in C keinen speziellen Typ um eine Zeichenkette (d.h. mehr als 1 Zeichen wie z.b. "else") zu speichern. In C verwendet man hierfür Arrays vom Typ char. In so einem char-Array kann man jetzt einfach mehrere Buchstaben schreiben, welche dann ein Wort bzw. einen String ergeben. Am Ende des Strings steht immer ein sog. Nullbyte ('\0') welches den String beendet.

    In deinem Code verwendest du getchar(). getchar() liest nur einen einzelnen Buchstaben ein, von daher kann der vergleich mit "else" (sind ja 4 Buchstaben) gar nicht funktionieren. Um also nach Keywords filtern zu können, müsstest du mindestens das Thema "char-Arrays" und "Strings in C" beherrschen, um es auch zu verstehen. Auch Zeiger wären hier nicht schlecht.

    Mit deinem Ansatz kommst du auf alle Fälle nicht sehr weit

    btw: if-schleife.de
     
  5. 25. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    also danke schonma für deine antwort.
    also wir hatten arrays schon in der uni, würde nich sagen, dass ich richtig mit ihnen umgehen kann, aber theoretisch hab ich es glaub ich verstanden..
    pointer machen wir erst nächste woche...
    allerdings blicke ich noch immer nicht richtig durch wie die keywords im qellltext definiert werden sollen..
    vllt sollte ich mein ergebnis von der ,,ascii-if-abfrage'' in einem array speichern und für jedes keyword einen array erstellen und vor der ausgabe dann die beiden arrays vergleichen und dann ggf den ,,keyword-array'' ausgeben.... ????
    komme schon allein von der denkweise gerade gar nicht weiter -.-
     
  6. 25. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    Hier mal ein vorschag, wie ich das vom ablauf des Programms her, machen würde (theoretisch):
    Eingabe des Benutzers in einer Variable speichern (char array) -> Sind von mir gesuchte Schlüsselwörter enthalten? - > Auswerten der Schlüsselwörter (sofern vorhanden) -> sortieren der Zeichen - > Ausgabe auf den Bildschirm...

    wenn du die Eingabe des Users nicht in einem string speicher, sondern weiterhin einzelnt einlesen möchtest dann muss deine Schleife (die so wie ich das sehe in deinem Programm vorhanden ist) etwas komplexer werden.

    In (Pseudo) C könnte man das z.B. so machen:
    Code:
    char keyword[20];
    char button;
    
    while(...)
    {
     button = getchar();
    
     if(button=='e' || button=='E')
     {
     keyword[i] = button;
     i++; // Programmiere c++ deshalb bin ich mir nicht sicher ob es "++" gibt, in c?
     }
     ...
    }
    da musst du dir dann noch überlegen, wie du den nächsten Buchstaben überprüfst. Nehmen wir z.B. an, dein Schlüsselwort ist "Else", dann musst du ja überprüfen, ob das nächste eingegebene zeichen auch "l" ist.. wenn nicht musst du den string wieder von vorne überschreiben (also i Null setzten).

    Am ende kannst du das wort dann mit einer Funktion wie strcmp überprüfen (sollte auch in c vorhanden sein).

    hoffe, das hilft dir weiter ...

    mfg
    xXsoureXx
     
  7. 25. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    danke auch nochmal für deine antwort, aber ich muss früher oder später eh mit arrays umgehen können, von daher hab ich es damit jetzt auch gemacht,
    ein kumpel hat mir geholfen, allein hätte ich das glaub ich nicht hinbekommen
    hab ihn hier mal kopiert, vielleicht habt ihr ja verbesserungsvorschläge
    Code:
    #include <stdio.h>
    #include <string.h>
    #define spalt 10 //Anzahl der Zeichen der eines einzelnen Wortes
    #define zeil 15 //Anzahl der maximalen Gesamtwörter
    int main()
    {
    printf("\n\t#################################################\n");
    printf("\t#\t\t\t\t\t\t#\n");
    printf("\t#\tName:\t\tMein Name\t\t#\n");
    printf("\t#\tMatrikelnr.:\t0190666666\t\t#\n"); //Headerformatierung
    printf("\t#\tDatum:\t\tNov. 2009\t\t#\n");
    printf("\t#\t\t\t\t\t\t#\n");
    printf("\t#################################################\n\n\n\n\n");
     
     //Initialisierungen
     int e=0; //nicht schließen
     int x; 
     int y;
     int z=0;
     char bst [spalt][zeil]; 
     int wort=0;
     int buchstabe=0;
    
     //formelle Bedingung der Eingabe
     printf("Bitte geben Sie eine Zeichenkette von maximal 30 Zeichen ein, trennen sie dabei jedes Wort per Leerzeichen\n");
     printf("Die Zeichenkette muss mit einem Buchstaben oder einer Zahl beginnen,\nnicht mit einem Leerzeichen!\n\n");
     
     //Initialisieren des Arrays mit "\0"
     for(z=0; z<zeil; z++)
     {
     for (y=0; y<spalt; y++)
     {
     bst[y][z]='\0';
     }
     }
     //Einlesen der Wörter in ein Array
     do
     { //Wörter
     do 
     { //Buchstaben
     x=getchar();
     bst[wort][buchstabe]=x;
     buchstabe++;
     } while (x!=10 && x!=32);
     wort++;
     buchstabe=0;
    
     } while (x!=10); 
     
     //Ausgabe
     
     for(x=0; x<wort; x++)
     {
     if (strstr(bst[x],"else") || strstr(bst[x],"if") || strstr(bst[x],"while") || strstr(bst[x],"do")||
     strstr(bst[x],"bool") || strstr(bst[x],"void")) //Keywords
     {
     printf("Keywords: %s\n", bst[x]);
     }
     else if ( (bst[x][0] >= 64 && bst[x][0] <=91) || (bst[x][0]>=97 && bst[x][0] <= 122)) //Buchstaben bst[x][0] - kontrolliert jeweils nur erstes zeichen des strings
     {
     printf("Buchstabenkette: %s\n", bst[x]);
     }
     else if (bst[x][0]>=48 && bst[x][0]<=57) //Zahlen
     {
     printf("Zahlenkette: %s\n", bst[x]);
     }
     else if ((bst[x][0]>=33 && bst[x][0]<=47) || (bst[x][0]>=58 && bst[x][0]<=64)|| 
     (bst[x][0]>=91 && bst[x][0]<=96)) //Sonderzeichen
     {
     printf("Sonderzeichenkette: %s\n", bst[x]);
     }
     } 
    printf("Druecken Sie eine Taste und bestaetigen Sie mit Enter, \num dieses Fenster zu schliessen\n",e); 
    scanf("%d", &e);
    return 0;
    }
    
    
    
    
     
  8. 26. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    Hey!

    Viel zu kompliziert! Verwende doch einfach fgets (). Danach mit strtok () aufspalten (das Leerzeichen als Delimiter) und die einzelnen Woerter mit strcmp () auf Keywoerter bzw. was du halt machen willst ueberpruefen. Musst halt dem Benutzer sagen, dass er Keywoerter durch Leerzeichen trennen soll (was normalerweise eine Regel ist, wer schreibt denn schon 'else8'?).

    Uebrigens ist die Idee, Syntax mit C zu analysieren bzw. Programm-Code eingeben zu lassen und den dann irgendwie auszufuehren so gut wie unmoeglich, da C eine kompilierte Sprache ist. Man muesste also einen kleinen eigenen Compiler in das Programm bauen, und das ist mehr als ein grosses Unterfangen.

    Mfg,

    Kolazomai
     
  9. 26. November 2009
    AW: datentypen als ,,Wort'' ausgeben mit C

    ich glaub du hast überlesen, dass ich anfänger bin,
    mir ging es weniger darum hier irgendwie nen großartigen syntaxüberprüfer zu programmieren, als vielmehr so grundlagen wie if, for, else if, arrays und so mal praktisch anzuwenden...
    ich hab persönlich nie vor wirklich programmieren zu können, da es einfach nicht dass teilgebiet meines studiums ist, was mich wirklich interessiert, bzw was ich in meinem beruf brauchen werde,
    daher arbeite ich ausschließlich daraufhin, die klausur bestmöglich zu bestehen

    dennoch danke für deine verbesserungsvorschläge, ich werde mir diese funktionen die du erwähnt hast mal googlen und ein wenig rumprobieren...

    gruß zippo
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.