c语言输入两个包含数字、字母等的字符串(16个字符以上,64个以内),将第一个字符串中 与第二个字符串相同的字符剔出来,其中字母区分大小写。 并把相关结果输出。 剔出功能为独立函数,返回所需结果值
时间: 2024-12-11 12:41:02 浏览: 12
在C语言中,我们可以创建一个名为`filter_common_chars`的函数来完成这个任务。这个函数接收两个字符串作为参数,首先检查它们是否满足长度要求,然后逐个比较每个字符。如果字符在两个字符串中都存在并且是相同的(包括大小写的区别),则将该字符添加到结果数组中。最后,返回含有共同字符的结果字符串。
```c
#include <stdio.h>
#include <string.h>
// 函数声明
char* filter_common_chars(const char* str1, const char* str2);
int main() {
char str1[65], str2[65];
printf("请输入第一个字符串 (最多16个字符): ");
fgets(str1, sizeof(str1), stdin); // 防止换行符
str1[strcspn(str1, "\n")] = '\0'; // 去除fgets添加的换行符
printf("请输入第二个字符串 (最多16个字符): ");
fgets(str2, sizeof(str2), stdin);
str2[strcspn(str2, "\n")] = '\0';
if (strlen(str1) > 16 || strlen(str2) > 16) {
printf("字符串过长,请确保不超过16个字符!\n");
return 1;
}
char result[65] = ""; // 初始化结果字符串
size_t common_len = 0;
for (size_t i = 0; i < strlen(str1); ++i) {
if (strchr(str2, str1[i]) != NULL) { // 检查字符是否存在于第二个字符串中
result[common_len++] = str1[i]; // 添加到结果
}
}
result[common_len] = '\0'; // 结束字符串
printf("公共字符组成的字符串: %s\n", result);
free(result); // 释放内存
return 0;
}
// 剔除相同字符的函数实现
char* filter_common_chars(const char* str1, const char* str2) {
size_t len1 = strlen(str1);
size_t len2 = strlen(str2);
char* result = (char*)malloc(len1 + 1); // 分配足够大的内存
if (!result) {
perror("Memory allocation failed");
return NULL;
}
size_t common_len = 0;
for (size_t i = 0; i < len1 && i < len2; ++i) {
if (str1[i] == str2[i]) {
result[common_len++] = str1[i];
}
}
result[common_len] = '\0'; // 结束字符串
return result;
}
```
在这个程序中,`filter_common_chars`函数会单独处理字符串过滤的部分,并返回新的字符串。主函数展示了如何从用户输入读取字符串并调用这个函数。注意,这里我们没有直接在主函数中处理字符串,而是将它作为一个独立的函数,以保持代码结构清晰。
阅读全文