C语言编程题字符串比较的4种方法

C 语言中,字符串比较是一个常见的操作。 C 语言中比较字符串的多种方式。从使用标准库函数到手动实现,再到忽略大小写比较,每种方法都有其特定的应用场景和用途。根据实际需求选择合适的方法,可以使字符串比较操作更加高效和准确。

1、使用标准库函数 strcmp

strcmp 是 C 标准库中的函数,用于比较两个字符串。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "world";
    int result = strcmp(str1, str2);
    
    if (result == 0) {
        printf("两个字符串相等\n");
    } else if (result < 0) {
        printf("str1 小于 str2\n");
    } else {
        printf("str1 大于 str2\n");
    }

    return 0;
}

2、使用标准库函数 strncmp

strncmp 可以指定要比较的字符数目。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "helicopter";
    int result = strncmp(str1, str2, 3);
    
    if (result == 0) {
        printf("前三个字符相等\n");
    } else if (result < 0) {
        printf("str1的前三个字符小于str2的前三个字符\n");
    } else {
        printf("str1的前三个字符大于str2的前三个字符\n");
    }

    return 0;
}

3、手动实现字符串比较

可以手动实现字符串比较逻辑,而不使用标准库函数。

#include <stdio.h>

int compareStrings(const char *str1, const char *str2) {
    while (*str1 && (*str1 == *str2)) {
        str1++;
        str2++;
    }
    return *(unsigned char *)str1 - *(unsigned char *)str2;
}

int main() {
    char str1[] = "hello";
    char str2[] = "hello";
    int result = compareStrings(str1, str2);
    
    if (result == 0) {
        printf("字符串相等\n");
    } else if (result < 0) {
        printf("str1 小于 str2\n");
    } else {
        printf("str1 大于 str2\n");
    }

    return 0;
}

4、忽略大小写比较

通过将每个字符转换为小写来比较两个字符串,可以手动实现忽略大小写的字符串比较。

#include <stdio.h>
#include <ctype.h>  // 包含 tolower 函数
#include <string.h> // 包含 strlen 函数

int caseInsensitiveCompare(const char *str1, const char *str2) {
    while (*str1 && *str2) {
        char c1 = tolower((unsigned char)*str1);
        char c2 = tolower((unsigned char)*str2);
        if (c1 != c2) {
            return c1 - c2;
        }
        str1++;
        str2++;
    }
    return (unsigned char)*str1 - (unsigned char)*str2;
}

int main() {
    char str1[] = "Hello";
    char str2[] = "hello";
    int result = caseInsensitiveCompare(str1, str2);
    
    if (result == 0) {
        printf("忽略大小写字符串相等\n");
    } else if (result < 0) {
        printf("忽略大小写 str1 小于 str2 \n");
    } else {
        printf("忽略大小写 str1 大于 str2\n");
    }

    return 0;
}

5、比较字符串指针

当比较字符串指针时,实际上是在比较它们的地址,而不是内容。这在某些情况下是有用的。

#include <stdio.h>

int main() {
    char str1[] = "hello";
    char str2[] = "hello";
    char *ptr1 = str1;
    char *ptr2 = str2;
    
    if (ptr1 == ptr2) {
        printf("指针相等\n");
    } else {
        printf("指针不相等\n");
    }

    // To actually compare content
    if (strcmp(ptr1, ptr2) == 0) {
        printf("字符串相等\n");
    } else {
        printf("字符串不相等\n");
    }

    return 0;
}

推荐阅读
cjavapy编程之路首页