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

yizhihongxing

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

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

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

相关文章

  • 统一社会信用代码生成器

    统一社会信用代码生成器 什么是统一社会信用代码 统一社会信用代码是由国务院颁布实施的一项新的统一编码标志,由18位数字和英文字符组成,用于统一登记和识别企业和法人单位的信息和活动。企业在进行注册、申请贷款、办理涉税业务等方面都需要用到统一社会信用代码。在我国实施数字化管理的大背景下,统一社会信用代码的重要性越来越显著。 为什么需要统一社会信用代码生成器 虽然…

    其他 2023年3月29日
    00
  • CSS 嵌套DIV布局(position属性)

    CSS 嵌套DIV布局(position属性)攻略 在CSS中,使用position属性可以控制元素的定位方式。嵌套DIV布局是一种常见的布局技术,通过使用position属性,可以实现更复杂的布局效果。下面是详细的攻略,包含两个示例说明。 1. position属性的取值 position属性有以下几个取值: static:默认值,元素按照正常文档流进行布…

    other 2023年7月28日
    00
  • 怎样才能学好java?

    当然,学好Java可能是一个漫长的过程,但是如果你能够遵循以下几个步骤,那么你的学习过程会更加高效: 1. 基础知识 首先,要学好Java,必须要掌握一些基础知识。这些包括基本的编程概念,例如变量、数据类型、运算符、循环、条件语句,以及面向对象编程中的继承、封装和多态等。阅读Java语言规范和《Java核心技术》或《Java编程思想》等经典参考书是入门的好方…

    其他 2023年4月16日
    00
  • 若依管理系统ruoyi-vue(二):权限系统设计详解

    若依管理系统ruoyi-vue(二):权限系统设计详解 在Ruoyi-Vue中,权限系统是非常重要的一部分。本文将详细讲解Ruoyi-V的权限系统设计,包括权限管理、角色管理、菜单管理等内容。 权限管理 在Ruoyi-Vue中,权限是指用户系统中某些资源的访问权限。Ruoyi-Vue使用RBAC(Role-Based Access Control)模型来管理…

    other 2023年5月7日
    00
  • Win10开发必备:Visual Studio 2015部分官方ISO镜像下载地址

    Win10开发必备: Visual Studio 2015部分官方ISO镜像下载地址攻略 1. 简介 在Win10开发中,Visual Studio 2015是一个非常重要的开发工具。本攻略将详细介绍如何获取Visual Studio 2015的官方ISO镜像下载地址。 2. 步骤 2.1. 打开官方下载页面 首先,打开Visual Studio官方网站,进…

    other 2023年8月4日
    00
  • mockito中文文档

    Mockito中文文档 简介 Mockito是一个开源的Java测试框架,用来创建和管理Mock对象。了解Mockito可以帮助Java开发人员更高效地编写单元测试和集成测试。 Mockito的特点包括: 简单易用 提供丰富的Mock方法和APIs 支持Stubbing、Verification等多种Mock使用场景 支持Mock复杂数据类型和对象结构 支持…

    其他 2023年3月28日
    00
  • asp.net三种方法实现事务

    ASP.NET是一种基于Microsoft .NET框架的Web应用程序开发技术。在ASP.NET中,事务是一种用于确保数据一致性和完整性的重要机制。本文将详细讲解ASP.NET中三种方法实现事务的完整攻略,并提供两个示例说明。 三种方法 在ASP.NET中,实现事务的三种方法分别是:ADO.NET事务、Enterprise Services事务和Trans…

    other 2023年5月5日
    00
  • Mysql如何查看表及字段信息

    当我们使用MySQL数据库时,经常需要查看现有的表格信息,包括表格的名称,列的名称,每一列的数据类型,列的默认值以及其他相关信息。这种情况下需要使用MySQL命令来查询数据表和字段信息。下面是MySQL查询数据表和字段信息的方法: 查看数据表信息 在MySQL中,可以通过使用“SHOW TABLES”语句来查看数据库中的所有表格。例如,要查看名为“sampl…

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