📅  最后修改于: 2023-12-03 15:10:50.441000             🧑  作者: Mango
在编程中,有时我们需要检查一个字符串中是否存在重复的字符。在 C 语言中,可以使用字符数组来表示字符串,以便进行检查。
下面是一个简单的程序,用于检查一个给定的字符串中是否有重复的字符。该程序使用了计数排序的思想,首先统计每个字符在字符串中出现的次数,然后扫描一遍计数数组,如果某个字符出现的次数大于 1,则表示存在重复字符。
#include <stdio.h>
#include <string.h>
#define MAX_CHARS 256
int has_duplicate_char(const char *str) {
int count[MAX_CHARS] = {0};
int len = strlen(str);
for (int i = 0; i < len; i++) {
count[str[i]]++;
}
for (int i = 0; i < MAX_CHARS; i++) {
if (count[i] > 1) {
return 1;
}
}
return 0;
}
int main() {
const char *str = "hello, world!";
if (has_duplicate_char(str)) {
printf("the string has duplicate characters.\n");
} else {
printf("the string doesn't have duplicate characters.\n");
}
return 0;
}
该程序定义了一个大小为 256 的整型数组 count,用于统计每个字符在字符串中出现的次数。然后,扫描一遍计数数组,如果某个字符出现的次数大于 1,则表示存在重复字符。
下面是该程序的运行结果:
the string has duplicate characters.
可以看到,由于字符串中包含了两个 "l" 字符,因此该程序判定该字符串包含有重复字符。
该程序还有一些需要注意的地方,例如,输入字符串可能包含空格字符、标点符号等非字母或数字的字符,需要根据实际需求作出调整。同时,该程序也可以通过一些简单的优化,例如,使用位图来替换计数数组,以提高程序的效率。