Verbesserungsvorschlag zu Worterkennung



  • Hallo Freunde, habe ein kleines Prog zur Worterkennung geschrieben, wirklich primitiv! Wollte fragen ob ich das token (was ja ein String ist) auch mit der switch-case Anweisung oder irgendwie anders mit fertigen Erkennungswörtern vergleichen kann.

    [/cpp]
    // K7token1.cpp
    //

    #include "stdafx.h"

    // Datei in Wörter zerlegen
    #include <iostream>
    #include <stdio.h>
    #include <string.h>

    using namespace std;

    #define BUFFERLEN 500

    void main()
    {
    FILE *file;
    char *token; //actual word
    char *key="X";
    int line; //Number of lines
    int wordcount; //Number of words
    char *filename = "readarr2.txt";
    char buffer[BUFFERLEN]; //input buffer

    file = fopen(filename, "r");
    if(file == NULL){
    printf("Cannot open file %s\n",filename);
    return ;
    }
    line = 0;
    wordcount = 0;
    while(!feof(file))
    {
    fgets(buffer,BUFFERLEN,file);/*read line*/
    printf("\n");
    token = strtok(buffer,"\n \t"); /* strtok initialization for each line */
    /* separation characters are */
    /* tabulator, endofline and blank */
    line++;
    switch(token[0])
    {
    case 'H':
    {
    if(token[1]=='A'){
    wordcount++;
    token = strtok(NULL,"\n \t"); /*next word*/
    }break;
    }
    }
    printf("%s",token);
    }
    printf("\n");
    printf("Number of Lines: %d\n",line);
    printf("Number of Treffer: %d\n",wordcount);

    }

    [cpp]

    Im MOment, kann ich jetzt HA erkennen und ein Zähler zählt hoch, wie kann ich Hallo erkennen, ohne 5 abfragen machen zu müssen?

    Danke euch!



  • Du musst einen string Vergleich machen. switch arbeitet nur auf integralen Typen, wie int oder char. Aber strings musst du (und da das eher C, als C++ zu schein seid) mit strcmp machen:
    http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

    In C++ kannst du die strings einfach mit dem ==-Operator vergleichen.

    std::string token ( "hallo" );
    
    if ( token == "hallo" ) std::cout << "found";
    

Anmelden zum Antworten