C ++:如何为char数组制作比较函数?

时间:2011-01-12 15:47:55

标签: c++ operator-overloading

这可能吗?当我把char作为类型时,我得到奇怪的错误消息:

inline bool operator==(const char *str1, const char *str2){
    // ...
}

错误讯息:error C2803: 'operator ==' must have at least one formal parameter of class type ...我根本不明白。

我在想是否可以直接比较像:

const char *str1 = "something";
const char *str2 = "something else";
const char str3[] = "lol"; // not sure if this is same as above

然后比较:

if(str1 == str2){
   // ...
}

但我也希望它能与之合作:

char *str = new char[100];

char *str = (char *)malloc(100);

我假设我使用这种方式的每个char数组都以NULL字符结尾,所以检查应该是可能的,但我知道它可能是不安全的等等。我只是想知道这是否可行,以及如何。

6 个答案:

答案 0 :(得分:7)

这是不可能的。正如您的编译器指出的那样,您不能为原始数据类型重载此运算符。比较的至少一侧必须是非原始的,以便可以进行过载。

从同样的意义上讲,您无法从原始数据类型派生新类(为其添加功能)。

答案 1 :(得分:4)

您正在尝试比较两个指针。

const char* str1 = "string1";
const char* str2 = "string1";

if(str1 == str2) // never true, str1 is not the same pointer as str2
{
};

但是,您已经提供了C ++标记,因此您应该使用std::string

#include <string>

std::string str1 = "string1";
std::string str2 = "string1";

if(str1 == str2)  // yes!  std::string overloads operator ==
{
}

答案 2 :(得分:3)

指针是内置类型。已经有内置的比较运算符,你不能覆盖它们。只需使用std::string

答案 3 :(得分:0)

决定我的评论会更好作为答案,你应该使用标准的string函数(strncmp,strncat等)。

编辑: 正如另一个答案中指出的那样,你不能做过载。但是对于char数组和char指针,你应该使用标准的库函数。

答案 4 :(得分:0)

你当然可以完全编写自己的比较函数,事实上它是最基本的事情之一。我不知道为什么有人会说你做不到。你不能称之为operator =。这是(未经测试):

int my_strcmp(char const* s1, char const* s2)
{
  for(;*s1 == *s2 && *s1; ++s1,++s2);

  return *s1 - *s2;
}

...
if (!my_strcmp(str1, str2)) // they're ==.

答案 5 :(得分:0)

使用strcmp()来比较字符:它适用于字符指针char *和字符串数组char [ ]

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

char *string_Char_pointer1 = {"2012-12-06 14:28:51"};
char *string_Char_pointer2 = {"1911-12-06 14:28:51"};

char string_Char_Array1[] = "2012-12-06 14:28:51";
char string_Char_Array2[] = "1911-12-06 14:28:51";

int main( void )
{
   char tmp[20];
   int result;

   printf( "Comparing  string_Char_pointer..\n\n\n");

   printf( "Compared strings:\n   %s\n   %s\n\n\n", string_Char_pointer1, string_Char_pointer2 );
   result = strcmp( string_Char_pointer1, string_Char_pointer2 );

   if( result > 0 )        strcpy( tmp, "greater than" );
   else if( result < 0 )   strcpy( tmp, "less than" );
   else    strcpy( tmp, "equal to" );

   printf( "   strcmp:   String 1 is %s string 2\n\n", tmp );

   printf( "\n\nComparing string_Char_Array..\n\n");

   printf( "Compared strings:\n   %s\n   %s\n\n\n", string_Char_Array1, string_Char_Array2 );
   result = strcmp( string_Char_pointer1, string_Char_pointer2 );

   if( result > 0 )        strcpy( tmp, "greater than" );
   else if( result < 0 )   strcpy( tmp, "less than" );
   else    strcpy( tmp, "equal to" );




   return 0;
}