2016-01-29 2 views
-1
#include <iostream> 
#include <string> 
using namespace std; 

class String { 
public: 
    String(){ 
     //default 
     value = 0; 
     name = "noname";   
    } 

    String (int x){ 
     setValue(x); 
    } 

    String (string y){ 
     setName(y); 
    } 

    String (int x ,string y) { 
     setValue(x); 
     setName(y); 
    } 

    void setValue(int x){ 
     value = x; 
    } 

    void setName(string y){ 
     name = y; 
    } 

    int getValue(){ 
     return value; 
    } 

    string getName(){ 
     return name; 
    } 

    int Compare (const char* name1,const char* name2){ 
     const char* n1 = name1; 
     const char* n2 = name2; 

     if (strcmp(n1, n2) != 0) 
      cout <<"test"<<endl; 
    }; 


private: 
    int value; 
    string name; 
    const char* n1; 
    const char* n2; 
}; 

int main() 
{ 
    string str1 ("abcd"); 
    string str2 ("bbbb"); 
    int Compare("abcd", "bbbb"); 

    //String coin1(1,"Penny"); 
    //cout<<"Coin 1 is a "<<coin1.getName()<<" and its worth $"<<coin1.getValue()<<endl; 
    //String coin2(10,"Dime"); 
    //cout<<"Coin 2 is a "<<coin2.getName()<<" and its worth $"<<coin2.getValue()<<endl; 

    return 0; 
} 

Возможно, я ошибаюсь, но я не могу придумать, как это сделать. Я пытаюсь сделать strcmp, который позволяет сравнивать объект String с другим объектом String или с Строка типа «C», но я, кажется, делаю это неправильно.Почему мой конструктор strcmp не работает?

+0

Это поможет получить более подробную информацию. В основном, 'int Compare (" abcd "," bbbb ");' не имеет никакого смысла. Вы хотите, чтобы вы могли называть 'Compare (coin1," abcd ")' например? Или вы в порядке с «Сравнить (coin1.getName(). C_str(),« abcd »);'. Пожалуйста, отредактируйте свой вопрос, чтобы включить некоторые примеры вызова сравнений, которые вы хотите сделать. –

+0

Нет такой вещи, как «конструктор strcmp». Неясно, почему вы спрашиваете. Все переменные 'n1/n2' кажутся ненужными. – EJP

ответ

2

Потому что вы не создаете объект String.

Try со следующим main()

   int main() 
       { 
        String str1 ("abcd"); // create an instance of String class 
        String str2 ("bbbb"); // create another 
        printf("%i", str1.Compare("abcd", "bbbb")); 
        printf("%i", str2.Compare("abcd", "bbbb")); 
        return 0; 
       } 

Вы также можете сделать свой метод Compare() работать с инстанс строки вместо этого, так:

     int Compare (const char* nameOther) 
         { 
          const char* n1 = name.c_str(); 
          const char* n2 = nameOther; 

          int result = strcmp(n1, n2); 
          if (result != 0) 
           cout <<"not equal"<<endl; 
          else 
           cout <<"equal"<<endl; 
          return result; // you forgot the 'return' at Compare(). 
         }; 

Тогда вы можете сделать:

  int main() 
      { 
       String str1 ("abcd"); // create an instance of String class 
       String str2 ("bbbb"); // create another 
       printf("%i", str1.Compare("abcd")); 
       printf("%i", str2.Compare("abcd")); 
       return 0; 
      } 

После того, как вы протестировали его, вы можете удалить ненужную треску e из Compare():

     int Compare (const char* nameOther) 
         { 
          return strcmp(name.c_str(), nameOther); 
         }; 
Смежные вопросы