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
相关产品推荐
相关产品推荐

