用C语言编写5字符串操作:随机输入两个字符串,完成以下操作:统计第一个字符串中包含的字母、数字、空格和其他符号的数量并统计并输出两个字符串中共有多少相同的字母,以及这些字母和它们各自的出现次数再连接两个字符串。
时间: 2024-10-06 07:04:48 浏览: 38
c语言中字符串的常用操作:搜索字符串的结尾、复制字符串
在C语言中,你可以使用标准库函数来实现这个功能。下面是一个简单的示例,展示了如何随机输入两个字符串,统计字符种类、相同字母及其频率,以及合并字符串。
首先,我们需要包含必要的头文件,创建一个函数来生成随机字符串,以及辅助函数来统计字符类型和计算共同字母及其频率。
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
// 函数生成随机字符串
char* generate_random_string(int len) {
static char alphanum[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
char* str = malloc(len + 1);
for (int i = 0; i < len; i++) {
str[i] = alphanum[rand() % strlen(alphanum)];
}
str[len] = '\0';
return str;
}
// 统计字符类型
void count_chars(char* str, char types[], int counts[]) {
for (int i = 0; str[i]; i++) {
if (isalpha(str[i])) {
types['a']++;
counts['a']++;
} else if (isdigit(str[i])) {
types['d']++;
counts['d']++;
} else if (isspace(str[i])) {
types['s']++;
counts['s']++;
} else {
types['o']++; // 其他符号
counts['o']++;
}
}
}
// 找出两个字符串中的相同字母及频次
void find_common_letters(char* str1, char* str2, char common[], int* common_counts) {
memset(common, 0, sizeof(common));
memset(common_counts, 0, sizeof(*common_counts) * 26);
for (int i = 0; str1[i]; i++) {
if (str2[i] && isalpha(str1[i]) && isalpha(str2[i])) {
common[str1[i]-'a'] = true;
common_counts[str1[i]-'a']++;
}
}
}
// 合并两个字符串
char* merge_strings(char* str1, char* str2) {
int total_len = strlen(str1) + strlen(str2) + 1;
char* merged_str = malloc(total_len);
strcpy(merged_str, str1);
strcat(merged_str, str2);
return merged_str;
}
int main() {
srand(time(NULL)); // 设置随机种子
int len1 = rand() % 100 + 1;
char* str1 = generate_random_string(len1);
int len2 = rand() % 100 + 1;
char* str2 = generate_random_string(len2);
char types1[4] = {'\0', '\0', '\0', '\0'};
int counts1[4] = {0, 0, 0, 0};
count_chars(str1, types1, counts1);
printf("String 1: %s\n", str1);
printf("Character count:\n");
printf("- Letters: %d (%c)\n", counts1['a'], 'a');
printf("- Digits: %d\n", counts1['d']);
printf("- Spaces: %d\n", counts1['s']);
printf("- Others: %d\n", counts1['o']);
char types2[4] = {'\0', '\0', '\0', '\0'};
int counts2[4] = {0, 0, 0, 0};
count_chars(str2, types2, counts2);
printf("\nString 2: %s\n", str2);
printf("Character count:\n");
printf("- Letters: %d (%c)\n", counts2['a'], 'a');
printf("- Digits: %d\n", counts2['d']);
printf("- Spaces: %d\n", counts2['s']);
printf("- Others: %d\n", counts2['o']);
char common[26] = {false};
int common_counts[26] = {0};
find_common_letters(str1, str2, common, common_counts);
printf("\nCommon letters and their frequency:\n");
for (int i = 0; i < 26; i++) {
if (common[i]) {
printf("%c: %d\n", 'a'+i, common_counts[i]);
}
}
char* result = merge_strings(str1, str2);
printf("\nMerged string: %s\n", result);
free(str1);
free(str2);
free(result);
return 0;
}
```
在这个示例中,我们首先生成两个随机字符串,然后统计每个字符串中各类型的字符数量。接着找出两个字符串中的相同字母并计算它们的频率。最后,我们将两个字符串合并成一个新的字符串。
阅读全文