C语言编写函数实现查找在两个字符串中同时出现的字符,按公共字符出现的次数进行排 序,返回排序后的结果。主程序中,调用函数实现输入、按从多到少的顺序输出公共字符。
时间: 2023-06-20 11:08:03 浏览: 148
以下是一个可能的 C 语言实现,其中使用了一个简单的结构体存储每个公共字符的信息:
```c
#include <stdio.h>
#include <string.h>
#define MAX_CHARS 256
struct char_info {
char c;
int count;
};
int compare_chars(const void* a, const void* b) {
const struct char_info* c1 = (const struct char_info*) a;
const struct char_info* c2 = (const struct char_info*) b;
return c2->count - c1->count;
}
void find_common_chars(const char* s1, const char* s2, struct char_info* result, int* num_common) {
int count1[MAX_CHARS] = {0};
int count2[MAX_CHARS] = {0};
int i, j;
*num_common = 0;
for (i = 0; s1[i] != '\0'; i++) {
count1[(int) s1[i]]++;
}
for (i = 0; s2[i] != '\0'; i++) {
count2[(int) s2[i]]++;
}
for (i = 0; i < MAX_CHARS; i++) {
if (count1[i] > 0 && count2[i] > 0) {
result[*num_common].c = (char) i;
result[*num_common].count = count1[i] < count2[i] ? count1[i] : count2[i];
(*num_common)++;
}
}
qsort(result, *num_common, sizeof(struct char_info), compare_chars);
}
int main() {
char s1[100], s2[100];
struct char_info common_chars[MAX_CHARS];
int num_common, i;
printf("Enter the first string: ");
scanf("%s", s1);
printf("Enter the second string: ");
scanf("%s", s2);
find_common_chars(s1, s2, common_chars, &num_common);
printf("Common characters and their counts (sorted by count):\n");
for (i = 0; i < num_common; i++) {
printf("%c: %d\n", common_chars[i].c, common_chars[i].count);
}
return 0;
}
```
该程序中,`find_common_chars` 函数接受两个字符串以及一个结构体数组和一个整数指针作为参数,将结果存储在结构体数组中,并将公共字符的数量存储在整数指针中。该函数首先使用两个计数器数组 `count1` 和 `count2` 统计两个字符串中每个字符出现的次数,然后遍历这两个计数器数组,将出现在两个字符串中的字符及其出现的次数存储在结构体数组中。最后,使用 `qsort` 函数对结构体数组按照出现次数进行排序。
在 `main` 函数中,程序首先接受用户输入的两个字符串,然后调用 `find_common_chars` 函数查找这两个字符串中同时出现的字符,并按照出现次数从多到少的顺序输出结果。
阅读全文