你好,我遇到了一个问题,需要比较两个包含数字的char*变量,例如char1 = "999999"
和char2="11111111"
。当我使用strcmp
函数时,它会返回char1变量大于char2,即使这是错误的。(我知道可以使用atoi函数在字符串中比较9个字符,但我需要使用10个字符,所以无法采用该方法)。
你好,我遇到了一个问题,需要比较两个包含数字的char*变量,例如char1 = "999999"
和char2="11111111"
。当我使用strcmp
函数时,它会返回char1变量大于char2,即使这是错误的。(我知道可以使用atoi函数在字符串中比较9个字符,但我需要使用10个字符,所以无法采用该方法)。
一种稍微繁琐的方法,避免使用atoi
等函数,是在较短的字符串前加上零。或者,假设没有前导零,可以先比较长度(因为较短的字符串必须有较低的值),然后进行字典序比较:
int numerical_strcmp(const char* a, const char* b) {
return (strlen(a) != strlen(b)) ? ((strlen(a) > strlen(b)) ? 1 : -1) : strcmp(a, b);
}
哦,这需要字符串包含非负数。
实际上,它是正确的。它对字符串内容进行字符串比较,而不是数字比较。
作为一种快速且简单的解决方法,假设您已经验证了字符串包含正整数,您可以执行以下操作:
if (strlen(char2) > strlen(char1)) {
// char2 > char1
} else if (strlen(char2) == strlen(char1)) {
cmp = strcmp(char2, char1);
if (cmp > 0) {
// char2 > char 1
} else if (cmp == 0) {
// char2 == char1
} else {
// char2 < char1
}
} else {
// char2 < char1
}
strlen()
比较两个字符串的长度。更长的字符串始终是最大的。strcmp()
。最短的方式应该是:
int mystrcmp(const char *a,const char *b)
{
return strlen(a)-strlen(b)?strlen(a)-strlen(b):strcmp(a,b);
}
它是按字面顺序排序的,这意味着以9开头的东西始终大于以1开头的东西。如果需要进行整数比较,您将需要使用 atoi。
int x = (strlen(a) - strlen(b));
以节省一个变量。 - Dummy00001