📜  检查 c 中字符串中的重复字符 (1)

📅  最后修改于: 2023-12-03 15:10:50.441000             🧑  作者: Mango

检查 C 中字符串中的重复字符

在编程中,有时我们需要检查一个字符串中是否存在重复的字符。在 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" 字符,因此该程序判定该字符串包含有重复字符。

该程序还有一些需要注意的地方,例如,输入字符串可能包含空格字符、标点符号等非字母或数字的字符,需要根据实际需求作出调整。同时,该程序也可以通过一些简单的优化,例如,使用位图来替换计数数组,以提高程序的效率。