2011-01-12 41 views
2

这可能吗?我得到奇怪的错误信息,当我把char用作类型:C++:如何使字符数组的比较函数?

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); 

我假设每一个字符数组我用这种方式在NULL字符就结束了,所以检查应该是可能的,但我知道它是不安全等等。我只是想知道这是否是可能的要做什么,以及如何。

+2

是否有任何理由不能使用,strncmp,strnlen,strncat等字符串函数? – pstrjds 2011-01-12 15:51:16

+2

@ pstrjds:其实这些都在``,``中,包含`std :: basic_string <>`模板和`std :: string` typedef。 – sbi 2011-01-12 16:14:10

+0

良好的通话,我的坏,我实际上提供了一个链接到我的答案cstring,只是匆忙打字:) – pstrjds 2011-01-12 16:16:16

回答

7

这是不可能的。正如你的编译器指出的那样,你不能为原始数据类型重载这个运算符。至少有一方比较必须是非原始的,以使超载成为可能。

在同样的意义上,你不能从一个原始数据类型派生一个新的类(为它添加功能)。

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 == 
{ 
} 
3

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

0

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

编辑: 正如在另一个答案中指出的,你不能做超载。但是在char数组和char指针的情况下,您应该使用标准库函数。

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 ==. 
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; 
}