Vergleichen von "stringketten"



  • Hallo zusammen,

    ich habe das nächste problemchen.

    ich habe 2 stringketten die folgendermassen aussehen könnten:

    string1 = "hund katze maus"

    string2 = "hugo1 HUGO2 hans peter katze maus"

    jetzt muss ich schauen ob die einzelnen begriffe aus string1 im string2 sind.

    WIE MACHE ICH DAS 😕 <- NEWBEE ON BOARD

    Gruß
    Navigato alias greenhorn 🙂



  • In C? Schau mal nach man: strstr(3)
    In C++? Schau mal nach std::string::find



  • bash, sh, csh, tcsh? Dann siehe man: grep(1), man: awk(1)



  • supertux schrieb:

    bash, sh, csh, tcsh? Dann siehe man: grep(1), man: awk(1)

    leider kann ich auf diese dincht zurückgreifen weil das ganze in c bzw. c++ gemacht werden muss 😞



  • hallo,
    ich habe dir diesen code gebastelt.ich hoffe dass das genau was du willst

    #include <string.h>
    #include <stdio.h>
    
    char string1[] = "hund katze maus";
    char string2[] = "hugo1 HUGO2 hans peter katze maus"; 
    
    char *token[100];
    char *token_string1_2[100];
    int i=0;
    int k=0;
    char * result;
    
    void main()
    {
    
       printf( "string1:%s\n\nTokens in string1:\n", string1 );
       /* Establish string and get the first token: */
       token[i] = strtok( string1, " ");
       while( token[i] != NULL )
       {
          /* While there are tokens in "string" */
          //printf( " %s\n", token[i] );
    	  i++;
          /* Get next token: */
          token[i] = strtok( NULL, " " );
       }
    
       // zum demonstration
       for(int j=0;j<i;j++)
       {
    	   printf( " %s\n", token[j] );
    
       }
    
       // auflisten der tokens aus string1 die sich widerum in string2 befinden
       printf("\n\nstring2:%s\n\n",string2);
       printf("tokens in string 1 und string 2:\n\n");
       for(j=0;j<i;j++)
       {
    	   result = strstr(string2,token[j]);
    	   if(result != NULL) // token existiert in string2
    	   {
    		   token_string1_2[k] = token[j];
    		   printf("%s\n", token_string1_2[k]);
    		   k++;
    	   }
    
       }
    
    }
    


  • ich habe folgenden code:

    char procs_name[]= {telnet};			
    std::string real_procs;
    
                      real_procs=(system("ps -e > /dev/null"));
    			if( (strstr(real_procs.c_str(), procs_name)) != NULL)
    			{
    				cout << "der Prozess: " << procs_name << "ist vorhanden" << endl;	
    			}
    			else if( (strstr(real_procs.c_str(), procs_name)) == NULL )
    				{
    					cout << "der Prozess: " << procs_name << " ist nicht vorhanden" << endl;
    
    				}
    

    obwohl der telnet prozess vorhanden ist bekomme ich die augabe, dass dieser prozess nicht vorhanden ist. wo ist der fehler im code??? 😕



  • Hm, entscheide Dich doch mal für C oder C++ und dann lern eine der beiden Sprachen vernünftig.

    char procs_name[]= {telnet}; kann gar nicht kompilieren, wie wäre es einfach mit sowas?

    const char procs_name[] = "telnet";
    

    oder in C++:

    const std::string procs_name = "telnet";
    

    Und das hier bringt dir überhaupt nichts, so funktioniert system einfach nicht.

    real_procs=(system("ps -e > /dev/null"));
    


  • nman schrieb:

    Hm, entscheide Dich doch mal für C oder C++ und dann lern eine der beiden Sprachen vernünftig.

    danke profi!!



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @Navigato:

    Das ist doch kein Grund sich gleich angepißt zu fühlen. Dein Code ist irgendeine Mischung aus C und C++. Und Du kannst Dir das Leben vermutlich deutlich leichter machen, wenn Du Dich für eines davon entscheidest.
    In C++ haste ne string-Klasse, die das was Du willst fast schon kann. std::string::find tut nahezu das was Du willst.
    Alternativ könntest Du auch ein std::set<string> bauen und da die möglichen Begriffe reinpacken. Dann kannst Du auch leicht abfragen. Das zerlegen des Eingabestrings kannste mit nem std::stringstream machen, oder mit irgendeinem StringTokenzizer (z.B. dem von boost).

    MfG Jester


Anmelden zum Antworten