Inhalte zweier unterschiedlicher Klassen miteinander vergleichen (strcmp)



  • RyoShinzo schrieb:

    Zum Thema: Wie liest du die DTD- bzw. XML-Datei denn erst ein?

    Jeweils mit einer switch Anweisung

    Hier mal ein Codefetzen... Das is jetzt nur besagte switch Anweisung für die DTD

    ClElement *verarbeite(ifstream& datei)
    {
    char zeichen, letztes;
    char puffer[100];
    int zaehler;
    enum zustandDTD zustandDTD = noise;
    ClElement *jetzt = NULL, *wurzel, *neu;
    
    for (datei.get(zeichen);!datei.eof();datei.get(zeichen))
        {
        switch(zeichen)
           {
        case '<':
           zustandDTD=direktive;
           zaehler=0;
           break;
        case '>':
           if (zustandDTD!=noise)
              {
    	  if (letztes!=' ')
    	     {
                 puffer[zaehler]='\0';
    			 jetzt->addTag(puffer);
    	     }
    	  }
           zustandDTD=noise;
           break;
        case ' ':
           if (letztes==' ') continue;
           puffer[zaehler]='\0';
           zaehler=0;
           switch(zustandDTD)
              {
           case direktive:
              if (strcmp(puffer,"!ELEMENT"))
    	     {
    	     cout << endl << "Diese Direktive verstehe ich nicht: " << puffer;
    	     zustandDTD=noise;
    	     }
    	  else zustandDTD=element;
              break;
           case element:
    		  neu = new ClElement(puffer);
    		  if (jetzt!=NULL) jetzt->setNext(neu);
    		  else wurzel=neu;
    		  jetzt=neu;
    		  zustandDTD=abhaengig;
              break;
           case abhaengig:
    			 jetzt->addTag(puffer);
    			 break;
    	   }
    	   break;
        default:
           if (zustandDTD!=noise) puffer[zaehler] = zeichen;
           zaehler++;
           break;
           }
        letztes=zeichen;
        }
    return wurzel;
    }
    

Anmelden zum Antworten