我正在尝试创建自定义字符串类。坚持我需要通过struct比较常量字符串
的问题实施例
typedef struct{
char *val;
} STRING;
int func (STRING* compare){
if ( compare == "a string" ){
return 1;
return 0;
}
答案 0 :(得分:4)
您需要使用strcmp。如果相等则保持返回1:
int func (STRING* compare){
if ( strcmp(compare, "a string" ) == 0)
return 1;
return 0;
}
答案 1 :(得分:2)
在C中处理struct
时,由于您没有面向对象的功能,因此将这些行为或操作封装在此类struct
内部方法中是件好事。
由于您的STRING
类型包含我认为应该由实例拥有的指针,因此您可以提供3种方法来管理STRING
对象的分配,解除分配和比较,例如:
#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
的结构(例如添加字段,删除字段)而不触及代码中的任何其他内容,则可以更改它。
答案 2 :(得分:1)
typedef struct{
char *val;
} STRING;
int cmp(const STRING *a)
{
return strcmp(a->val, "a string");
}
您需要strcmp
进行字符串比较。 ==比较地址。