私はカスタム文字列クラスを作成しようとしています。私は文字列定数構造体をCで定数と比較
例
typedef struct{
char *val;
} STRING;
int func (STRING* compare){
if (compare == "a string"){
return 1;
return 0;
}
私はカスタム文字列クラスを作成しようとしています。私は文字列定数構造体をCで定数と比較
例
typedef struct{
char *val;
} STRING;
int func (STRING* compare){
if (compare == "a string"){
return 1;
return 0;
}
strcmpを使用する必要があります。等しい場合は1を返すと維持するには、次の
int func (STRING* compare){
if (strcmp(compare, "a string") == 0)
return 1;
return 0;
}
あなたがオブジェクト指向の機能を持っていないので、Cにstruct
を扱う、それは、そのようなstruct
内側の方法での動作や操作をカプセル化するために良いことです。
あなたSTRING
タイプは、私は、あなたが例えば、割り当て、decallocationとSTRING
オブジェクトの比較を管理するための3つの方法を提供することができインスタンスによって所有されなければならないと思いポインタが含まれているためこのように
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
typedef struct {
char* val;
} STRING;
STRING string_alloc(const char* val) {
STRING string;
string.val = malloc(strlen(val)+1);
strcpy(string.val, val);
return string;
}
void string_free(STRING* string) {
free(string->val);
}
bool string_compare(const STRING* str1, const STRING* str2) {
return strcmp(str1->val, str2->val) == 0;
}
int main(void) {
STRING string = string_alloc("foo");
STRING string2 = string_alloc("foo");
printf("Are equal: %s\n", string_compare(&string, &string2) ? "true" : "false");
string_free(&string);
string_free(&string2);
return 0;
}
をメソッド内で比較動作をカプセル化し、コードの他の部分に触れることなくstruct
の構造を変更する必要がある場合(たとえば、フィールドの追加、フィールドの削除など)、そのメソッドを変更することができます。
'strcmp(比較 - > val、"文字列 ")== 0' – BLUEPIXY
@Barmar' overload' + 'C'は計算しません。 – chux