要求求两个字符串的交集,可按以下步骤进行:
步骤一:获取输入的两个字符串
在程序中先定义两个字符串数组,用来保存输入的两个字符串。可使用scanf()
函数实现字符串输入。提醒:为避免数组越界等问题,请设定好字符串数组的固定长度,如100。
char str1[100], str2[100];
printf("请输入字符串1:");
scanf("%s", str1);
printf("请输入字符串2:");
scanf("%s", str2);
运行该代码,可得到以下交互:
请输入字符串1:abcdefg
请输入字符串2:deghijk
此时,用户输入了两个字符串。
步骤二:对两个字符串进行排序
为了方便求交集,先要对输入的两个字符串进行排序。
c语言提供了qsort()
库函数进行排序。qsort()
函数的第一个参数是需要排序的数组、第二个参数是数组长度、第三个参数是每个数组元素的类型、第四个参数是比较函数。
具体代码如下:
int compare(const void* a, const void* b) {
return (*(char*)a - *(char*)b);
}
qsort(str1, strlen(str1), sizeof(char), compare);
qsort(str2, strlen(str2), sizeof(char), compare);
运行该代码,str1
和str2
已经排好序。
步骤三:求交集
要求两个字符串的交集 就要遍历两个字符串,如果两个字符串中的字符相等,则加入到交集数组中。
代码如下:
char intersection[100];
int index = 0; // intersection数组的下标
int i = 0, j = 0; // i和j分别为遍历字符串1和字符串2的下标
while (i < strlen(str1) && j < strlen(str2)) {
if (str1[i] == str2[j]) {
intersection[index++] = str1[i];
i++;
j++;
}
else if (str1[i] < str2[j]) {
i++;
}
else {
j++;
}
}
intersection[index] = '\0';
运行该代码,可得到交集 "de"
。
示例说明
示例1:求字符串 abcde
和bcdef
的交集
用户输入:
请输入字符串1:abcde
请输入字符串2:bcdef
程序输出:
交集为:bcde
解释:对字符串abcde
和bcdef
进行排序后,分别得到"abcde"
和"bcdef"
。然后在遍历排序后的字符串的过程中,当两个对应位置的字符相等,则加入到交集串中。
示例2:求字符串 ababcaba
和bdacbebae
的交集
用户输入:
请输入字符串1:ababcaba
请输入字符串2:bdacbebae
程序输出:
交集为:abbe
解释:同示例1,对字符串 ababcaba
和bdacbebae
进行排序后,分别得到 "aaabbbbc"
和"aabbccdee"
,在遍历过程中,只有当字符串中的字符相等时,才将该字符加入到交集串中,得到 "abbe"
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c语言求两个字符串的交集 - Python技术站