有没有办法在 C 中使用 strcmp 比较 2 个不同长度的字符串

  • 本文关键字:字符串 比较 strcmp 有没有 c
  • 更新时间 :
  • 英文 :


假设我想将 24 和 4 作为字符串进行比较。由于 24 根据其 ASCII 值大于 4,它不会返回正数,而是尝试返回负值,因为它只比较两个字符串的第一个数字,因为它们具有不同的字符串长度。有什么方法可以比较两个字符串中的所有字符吗?

#include <stdio.h>
#include <string.h>
int main() {
char st[100] = "24";
char st1[100]= "4";
printf("%d", strcmp(st, st1));
}

@AndrewHenle评论道:

如果要比较具有不同位数而不是字符串的数字,则需要将字符串转换为实际数字。

从您的注释中可以清楚地看出,您要比较字符串中包含的数值,因此您需要这样做 - 将字符串转换为实际数字。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main()
{
char st[100] = "24";
char st1[100]= "4";
long val, val1;
char * endptr;
errno = 0;
val = strtol( st, &endptr, 10 );
if ( errno == ERANGE || *endptr != '' )
{
// error parsing st -- not a number, or additional characters
return EXIT_FAILURE;
}
val1 = strtol( st1, &endptr, 10 );
if ( errno == ERANGE || *endptr != '' )
{
// error parsing st1 -- not a number, or additional characters
return EXIT_FAILURE;
}
printf("%ld", val - val1);
return EXIT_SUCCESS;
}

你可以只使用 atoi,特别是如果你可以保证字段包含数字,而不是在适当的值范围内的数字(由于已经从你显然正在处理的日期输入中解析了它们(,但我更喜欢展示更健壮的、错误检查的版本。

C 标准定义了strcmp()

int strcmp(const char *s1, const char *s2);

strcmp()函数应将s1指向的字符串与s2指向的字符串进行比较。 非零返回值的符号应由第一对字节(均解释为类型unsigned char(的值之间的差值的符号确定,这些字节的值在要比较的字符串中有所不同。

返回值

完成后,如果s1指向的字符串分别大于、等于或小于s2指向的字符串,则strcmp()应返回一个大于、等于或小于0的整数。

规范只声明返回值的符号,而不是值本身,所以不,用strcmp()不可能做你想做的事。

最新更新