2015-12-07 7 views
0

Je veux comparer cs[i][a].days[x] et "Mon" afin de savoir si je peux mettre cette chaîne dans le catalogue de lundi ... Mais il semble que cela ne fonctionne pas? (Aucune fonction correspondant)Comment utiliser strcmp() correctement dans ce code?

#include <iostream> 
    #include <string> 
    #include <cstring> 
    struct course{ 
     string name; 
     string *days; //dynamic array of days int start_hr, start_min; 
     int start_hr, start_min; 
     int end_hr, end_min; 
    }; 
      void print_day2(course **cs,int num, int number, int day){ 
        cout << "Monday: " << endl; 
        for(int i = 0; i <number; i++){ 
         for(int a = 0; a < num;a++){ 
          for(int x = 0; x < day; x++){ 
           if(strcmp(cs[i][a].days[x], "Mon")==0){ 
            cout << cs[i][a].days[x] <<endl; 
           } 
          } 
         } 
        } 
+0

En plus d'utiliser '' opérateur == pour comparer des chaînes, pensez à utiliser 'std :: vecteur ' pour votre membre 'days'. – legalize

Répondre

3

Bien qu'il soit tentant d'appeler ->c_str() faire un style de C comparer en utilisant strcmp, il est préférable d'utiliser simplement ->compare() ou simplement == car ils sont idiomes C plus ++ natif

C le style (pas recommandé):

strcmp (cs[i][a].days[x].c_str(), "Mon") 

fonction membre:

cs[i][a].days[x].compare("Mon") 

opérateur relatational

cs[i][a].days[x] == "Mon" 

Notez que ce ne sera pas convertir "Mon" à un string parce que les deux ->compare() et == ont une dérogation pour const char *.

+0

Merci beaucoup! – AURRR

+0

'" Mon "' n'est pas converti en 'std :: string' car' basic_string' a un [operator == surcharge pour array of charT] (http://en.cppreference.com/w/cpp/string/ basic_string/operator_cmp) – RedX

+0

@RedX merci, je ne sais pas pourquoi j'ai manqué les remplacements, mis à jour pour le noter –

0

Vous devez utiliser c_str() pour convertir votre chaîne à une chaîne C (fin null)