2017-10-08 4 views
-3

Dies ist ein Code zur Überprüfung einer gegebenen Zeichenfolge ist ein identifier oder ein keyword. Hier ist der Code:ein gegebener String ist ein gültiger Bezeichner oder Schlüsselwort in C++

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
#include<ctype.h> 


int main(){ 

    int i = 0, flag = 0; 
    char a[10][10] = {"int", "float", "break", "long", "char", "for", "if", "switch", "else", "while"}, string[10]; 

    //clrscr(); 

    printf("Enter a string :"); 
    gets(string); 

    /*----Checking whether the string is in array a[][]----*/ 

    for(i = 0 ; i < 10; i++){ 
     if((strcmp(a[i], string) == 0)) 
      flag = 1; 
    } 

    /*----If it is in the array then it is a keyword----*/ 

    if(flag == 1) 
     printf("\n%s is a keyword ", string); 

    /*----Otherwise check whether the string is an identifier----*/ 
    else{ 
     flag = 0; 
     /*----Checking the 1st character*----*/ 

     if((string[0] == '_') || (isalpha(string[0]) != 0)){ 
      /*---Checking rest of the characters*---*/ 
      for(i = 1; string[i] != '\0'; i++) 
      if((isalnum(string[i]) == 0) && (string[i]!='_')) 
       flag = 1; 
     } 
     else 
      flag = 1; 
     if(flag == 0) 
      printf("\n%s is an identifier ", string); 
     else 
      printf("\n%s is neither a keyword nor an identifier ", string); 
    } 
     getch(); 
} 
  • Ich möchte diesen Code tun leichter. Und ist es möglich, die alle Schlüsselwörter zu erhalten oder zu identifizieren, ohne im char zu deklarieren? Und wie geht das?

Kann S.O den Code bereitstellen? Hier

+1

Wenn Ihr Code konsistent formatiert und eingerückt ist, kann es einfacher sein, der Logik zu folgen. – Galik

+1

Es wäre viel einfacher, wenn Sie [std :: string] (http://en.cppreference.com/w/cpp/string/basic_string) und [std :: vector] (http: //en.cppreference .com/w/cpp/container/vector) anstelle von Arrays und Zeichenfeldern. – Galik

+0

Wenn Sie den Arbeitscode verbessern möchten, fragen Sie besser unter [SE Code Review] (https://codereview.stackexchange.com/). – user0042

Antwort

1

ist eine einfache Methode:

static const std::string keywords[] = 
{ 
    "char", "class", 
    "struct", 
    /* ... */ 
}; 
static const size_t keyword_quantity = 
    sizeof(keywords)/sizeof(keywords[0]); 

std::string search_word; 
cin >> search_word; 

std::string const * const iterator = 
    std::find(&keywords[0], &keywords[keyword_quantity], 
       search_word); 
if (iterator != &keywords[keyword_quantity]) 
{ 
    cout << "Word is a keyword!\n"; 
} 

Der std::string Datentyp macht Text oder String-Handling erleichtert.
Die std::find Funktion ist einfach, so dass Sie sie nicht schreiben müssen (und sie ist bereits getestet).

Verwandte Themen