如果我不被允许使用<string.h>
库,我怎样才能轻松比较字符串的值。我有一个数据文件,其中包含一个结构成员的6个可能值。我需要做的就是创建一个循环来计算结构数组中每个值的数量。问题是,我无法弄清楚如何比较值,从而何时增加计数器。
for (i = 0; i < datasize; i++){
if (struct.membervalue == given)
givencount++;
if (struct.membervalue == given2) // But I can't compare them with the ==
givencount2++ ; // because they are strings.
}
编辑:我必须使用的预定义枚举
typedef enum {
penny = 1,
nickel = 5,
dime = 10,
quarter = 25
}changeT;
我有价值“便士”,我该如何与此比较或将其联系起来?
答案 0 :(得分:2)
bool isEqual(const char *string1, const char *string2)
{
do
{
if (*string1 != *string2) return false;
if (*string1 == 0) return true;
++string1;
++string2;
} while (1);
}
更新:enum
不会改变任何内容。您仍需要识别字符串 "penny"
,然后才能为其分配值。
答案 1 :(得分:1)
您可以尝试以下功能:
int str_cmp(const unsigned char* str1, const unsigned char* str2)
{
int result;
do {
result = (int)*str1 - (int)*str2;
str1++;
str2++;
} while((!result) && (*str1|*str2))
return result;
}
如果str1>str2
,则输出为正,如果str1<str2
则为负,如果相等则为零。
答案 2 :(得分:0)
最快的一个:
int strcmp(const char *s1, const char *s2) {
int ret = 0;
while (!(ret = *(unsigned char *) s1 - *(unsigned char *) s2) && *s2)
++s1, ++s2;
if (ret < 0) {
ret = -1;
}
else if (ret > 0) {
ret = 1 ;
}
return ret;
}
答案 3 :(得分:0)
/*These variants could point to invalid memmory, but dont de-reference it.*/
int isEqual(const char *string1, const char *string2)
{
while (*string1 == *string2++)
if ( 0 == *string1++ ) return 1;
return 0;
}
/* This variant is NULL-resistent. For both NULL return true.*/
int isEqual(const char *string1, const char *string2)
{
if ( !string1 || !string2 ) return string1 == string2 ;
while (*string1 == *string2++)
if ( 0 == *string1++ ) return 1;
return 0;
}
这些只是比较字符串的功能。为了帮助我们更多,我们需要查看您正在尝试的代码。它可能是这样的:
if (isEqual(data.membervalue, "penny" ) pennycount++;
else
if (isEqual(data.membervalue, "nickel") nickelcount++;
你提供的枚举对计算没什么帮助。计算“货币”总额很有用。
int Total= penny * pennycount + nickel * nickelcount ... ;
如果您需要的只是总数,那就更简单了:
if (isEqual(data.membervalue, "penny" ) Total += penny;
else
if (isEqual(data.membervalue, "nickel") Total += nickel;