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 bufferfile = 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.
switcharbeitet nur auf integralen Typen, wie int oder char. Aber strings musst du (und da das eher C, als C++ zu schein seid) mitstrcmpmachen:
http://www.cplusplus.com/reference/clibrary/cstring/strcmp/In C++ kannst du die strings einfach mit dem
==-Operatorvergleichen.std::string token ( "hallo" ); if ( token == "hallo" ) std::cout << "found";