You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何检查字符数组内某字符是否出现两次?相关实现疑问

C语言中检查字符数组重复字符的方案

C语言的“切片”替代方式

C语言没有Python那样直接的数组切片语法(比如arr[3:]),但字符数组本质是指针,你可以通过指针偏移实现类似效果:比如arr + 3就等价于从原数组第3个元素(下标从0开始)往后的所有元素,和Python的arr[3:]作用一致。

检查字符是否出现两次的最佳方案

利用strchr的特性做二次查找是最简洁高效的方式,不需要额外写复杂逻辑:

  • 先用strchr找到目标字符首次出现的指针first_pos;
  • 如果first_pos不为NULL,就从first_pos + 1的位置再次调用strchr查找同一字符;
  • 若第二次查找返回非NULL,说明字符至少出现两次。

示例代码:

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

int has_duplicate_char(const char *arr, char target) {
    char *first_pos = strchr(arr, target);
    if (!first_pos) return 0; // 首次未找到,直接返回0
    return strchr(first_pos + 1, target) != NULL; // 从首次位置下一位继续查找
}

int main() {
    char test_arr[] = "hello world";
    printf("%d\n", has_duplicate_char(test_arr, 'l')); // 输出1(存在重复)
    printf("%d\n", has_duplicate_char(test_arr, 'z')); // 输出0(无重复)
    return 0;
}

手动实现的可行性

完全可以用for循环、条件判断手动实现,而且不需要全局变量(用局部变量就能完成统计)。比如遍历数组时记录目标字符的出现次数,达到2次就直接返回结果:

示例代码:

#include <stdio.h>

int has_duplicate_char_manual(const char *arr, char target) {
    int count = 0;
    while (*arr != '\0') {
        if (*arr == target) {
            count++;
            if (count == 2) {
                return 1;
            }
        }
        arr++;
    }
    return 0;
}

int main() {
    char test_arr[] = "hello world";
    printf("%d\n", has_duplicate_char_manual(test_arr, 'l')); // 输出1
    printf("%d\n", has_duplicate_char_manual(test_arr, 'z')); // 输出0
    return 0;
}

这种手动实现的方式更灵活,比如可以扩展统计总出现次数或自定义查找范围,但仅检查是否重复的话,strchr二次查找的方式更简洁。

内容的提问来源于stack exchange,提问作者B Kazimy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:12:46