c语言求两个字符串的交集

要求求两个字符串的交集,可按以下步骤进行:

步骤一:获取输入的两个字符串

在程序中先定义两个字符串数组,用来保存输入的两个字符串。可使用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);

运行该代码,str1str2已经排好序。

步骤三:求交集

要求两个字符串的交集 就要遍历两个字符串,如果两个字符串中的字符相等,则加入到交集数组中。

代码如下:

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:求字符串 abcdebcdef的交集

用户输入:

请输入字符串1:abcde
请输入字符串2:bcdef

程序输出:

交集为:bcde

解释:对字符串abcdebcdef进行排序后,分别得到"abcde""bcdef"。然后在遍历排序后的字符串的过程中,当两个对应位置的字符相等,则加入到交集串中。

示例2:求字符串 ababcababdacbebae的交集

用户输入:

请输入字符串1:ababcaba
请输入字符串2:bdacbebae

程序输出:

交集为:abbe

解释:同示例1,对字符串 ababcababdacbebae进行排序后,分别得到 "aaabbbbc""aabbccdee",在遍历过程中,只有当字符串中的字符相等时,才将该字符加入到交集串中,得到 "abbe"

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c语言求两个字符串的交集 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • R语言变量重编码、重命名的操作

    R语言变量重编码、重命名的操作攻略 在R语言中,变量重编码和重命名是常见的数据处理操作。本攻略将详细介绍如何进行这些操作,并提供两个示例说明。 变量重编码 变量重编码是将原始变量的取值映射到新的取值上,常用于将分类变量转换为数值变量或者将原始取值进行分组。以下是变量重编码的步骤: 创建一个映射表,将原始取值与新取值进行对应。可以使用ifelse()函数、ca…

    other 2023年8月8日
    00
  • 强行退出Mac上应用程序的6 种方法

    当我们在Mac上使用应用程序时,有时候会遇到应用程序崩溃或者无响应的情况,这时我们就需要强制退出程序。下面,我会分享六种在Mac上强制退出应用程序的方法。 方法一: 使用快捷键 按住command+option+esc键直到弹出“强制退出程序”窗口,选择需要终止的应用程序,然后点击“强制退出”按钮即可退出程序。 [示例]:当我们正在使用Safari浏览器时,…

    other 2023年6月25日
    00
  • BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

    下面是“BAT批处理之文件与文件夹操作代码(附xcopy命令详解)”的完整攻略。 一、 BAT批处理简介 BAT批处理是一种自动化任务处理的脚本语言,可以用于一次性执行多个命令,实现批量操作,提高工作效率。在Windows操作系统中,我们可以通过编写BAT批处理脚本来实现自动化执行一些任务,如复制、移动、删除文件等操作。 二、 文件与文件夹操作代码 1. 创…

    other 2023年6月26日
    00
  • python使用 __init__初始化操作简单示例

    当我们创建一个Python类时,我们有时需要在实例化对象时进行一些初始化操作。这就是使用Python的__init__函数的地方。在这篇文章中,我将详细讲解如何使用__init__函数进行初始化操作。下面是完整攻略: 1. __init__函数的基本用法 __init__函数是Python类的构造函数,它用于初始化新创建的对象。当我们实例化一个类时,__in…

    other 2023年6月20日
    00
  • ASP.NET网站管理系统退出 清除浏览器缓存,Session的代码

    下面我将详细讲解如何实现ASP.NET网站管理系统退出并清除浏览器缓存和Session信息。 1. 清除浏览器缓存 在ASP.NET中,可以使用Response对象的Headers属性清除浏览器缓存。具体步骤如下: 首先,在需要清除浏览器缓存的页面的Page_Load事件中,添加以下代码: Response.Cache.SetCacheability(Htt…

    other 2023年6月27日
    00
  • 魔兽世界8.0血DK堆什么属性 鲜血死亡骑士属性选择及优先级

    魔兽世界8.0血DK堆什么属性 鲜血死亡骑士在8.0版本中的属性选择和优先级相比之前版本有了很大的变化。对于血DK而言,主属性仍然是耐力,但次要属性的选择则需要根据自己的装备和属性权值来进行调整和优化。 属性选择 在8.0版本中,鲜血死亡骑士的属性优先级为:1. 耐力2. 全能3. 急速4. 精通5. 暴击 其中,全能属性是8.0版本的新属性,它综合了所有次…

    other 2023年6月27日
    00
  • Android进阶Hook拦截系统实例化View过程实现App换肤功能

    下面我将为你详细讲解“Android进阶Hook拦截系统实例化View过程实现App换肤功能”的完整攻略。 1. 理解Hook和拦截的概念 在讲解实现App换肤功能前,我们需要先理解Hook和拦截的概念。 1.1 Hook Hook是一种技术,它能够让程序在运行时(Runtime)动态改变其行为。换言之,我们可以通过Hook技术,修改程序在运行时的代码逻辑或…

    other 2023年6月27日
    00
  • css制作超萌吃豆豆加载动画效果

    你好,要制作“css制作超萌吃豆豆加载动画效果”,可以按照以下步骤进行: 步骤一:准备工作 在 html 文件中引入 CSS 样式表,在 head 标签中添加以下代码: <link rel="stylesheet" href="path/to/your/css/file.css"> 步骤二:HTML 结构 …

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部