C程序:查找字符串中字符的最小出现次数

什么是字符串?

字符串是一系列字符所组成的序列,字符包括字母、数字、特殊符号等等。在C程序中,我们可以用字符数组来表示字符串。例如:

char str[] = "Hello, world!";

这个字符数组就是一个字符串,它包含了13个字符。

问题:如何查找字符串中字符的最小出现次数?

分析问题

我们需要遍历整个字符串,对于每个字符,统计它出现的次数,最后找出最小值即可。这个过程可以分为两个步骤:

遍历字符串,统计每个字符出现的次数

找出出现次数最小的字符

解决问题-步骤1:遍历字符串,统计每个字符出现的次数

我们可以用一个整型数组来记录每个字符在字符串中出现的次数。首先我们需要初始化这个数组,将所有元素的值设置为0。然后遍历整个字符串,对于每个字符,将对应元素的值加1。

void countChars(char* str, int* count) {

for (int i = 0; str[i] != '\0'; i++) {

count[str[i]]++;

}

}

这个函数接受一个字符数组和一个整型数组作为参数,其中字符数组表示要统计的字符串,整型数组表示每个字符在字符串中出现的次数。

解决问题-步骤2:找出出现次数最小的字符

我们可以遍历整个字符数组,记录出现次数最小的字符。然而,由于字符的ASCII码不一定连续,所以我们需要遍历整个整型数组,依次寻找出现次数最小的元素。

char findMinChar(int* count) {

int minCount = INT_MAX; // INT_MAX是一个常量,表示int类型的最大值

char ch;

for (int i = 0; i < 256; i++) { // ASCII码共有256个字符

if (count[i] > 0 && count[i] < minCount) {

minCount = count[i];

ch = (char)i;

}

}

return ch;

}

这个函数接受一个整型数组作为参数,返回出现次数最小的字符。

完整代码

下面是将上面两个函数集成在一起的完整代码:

#include <stdio.h>

#include <limits.h> // 包含INT_MAX常量的头文件

void countChars(char* str, int* count) {

for (int i = 0; str[i] != '\0'; i++) {

count[str[i]]++;

}

}

char findMinChar(int* count) {

int minCount = INT_MAX;

char ch;

for (int i = 0; i < 256; i++) { // ASCII码共有256个字符

if (count[i] > 0 && count[i] < minCount) {

minCount = count[i];

ch = (char)i;

}

}

return ch;

}

int main() {

char str[100];

int count[256] = {0}; // 初始化数组

printf("请输入一个字符串:");

scanf("%s", str);

countChars(str, count);

char ch = findMinChar(count);

printf("出现次数最小的字符是:%c\n", ch);

return 0;

}

测试

下面是几组测试样例及输出结果:

测试样例1:

输入:Hello, world!

输出:出现次数最小的字符是:H

测试样例2:

输入:abcabcabc

输出:出现次数最小的字符是:b

后端开发标签