C语言(CED)多组字符串匹配,输出所有重复出现的字符串,多次重复出现的只输出一次就好。

最近遇到一道题目:多组字符串匹配,输出所有重复出现的字符串,多次重复出现的只输出一次就好。

举个例子:

input:qwer

           qwer

           sdfgh

output:qwer

题意大致就是这样,下面给出我的最终解答,因为不是OJ所以可能还会有些许错误!若有,还望各位指正!

一、解题思路

1、main()函数里:

因为涉及到多组字符串匹配,为了方便起见我是用二维数组(开的足够大,而且是有两个,一个用来存储初次输入的字符串,另一个用来保存要输出的结果,以便统一输出),存储字符串并进行比较(你可以尝试一下动态分配内存空间malloc一下)。我先输入一个数字,用来明确将要有多少串字符串进行匹配。接下来根据之前输入的数字,进行字符串的输入,输入完成后,就会跳进字符串匹配函数match()中。

2、match()字符串匹配函数

这部分函数写的很复杂->空间复杂度高,循环套循环,循环套循环,因为不是OJ所以这么任性!这个函数大体上实现两个功能1:匹配字符串,将重复出现的字符串有条件的放到str1[1000][1000]数组中

2:对已重复出现的字符串进行查重,即“1”中的存储条件,以达到单一输出的目的!

match()内部使用的函数是函数库中提供的strcmp()函数和strcpy()函数。值得注意的是,在将已查到的重复的字符串放入str1[1000][1000]数组(输出结果聚集数组)中时,有一个Flag标记,用来标明这个将要存储的字符串是否已在str1[1000][1000]数组存在。

二、实现过程

下面的程序将main()和match()函数分离,代码的注释应该是很清楚了,所以在这里就不多说了!程序中涉及到二维数组传参问题等可以参考我的其他博文!(strcmp()可以比较二维数组,但是是要按行来比较

#include<stdio.h>
#include<string.h>
char str[1000][1000]; //定义一个能存1000个字符串的大小为1000个字符的char型数组
char str1[1000][1000];//把所有找到的不重复的结果存储找到STR1中
int k=0;//str1中的字符串数量
void match(int n,char (*str)[1000])
{int i,p;//定义内外循环变量int j=0;//循环控制变量,判断找到的在str中重复出现的字符串之前是否存到了str1中。for(i=0; i<n-1; i++){for(p=i+1; p<n; p++){if(strcmp(str[i],str[p])==0)//说明str字符串组中有重复出现的字符串{if(k==0)//表示str1中还没有字符串,所以可以直接复制过去{strcpy(str[p],str1[k]);k++;}else{int flag=0;//用于确定str中重复出现的字符串是否在str1中出现for(j=0;j<k;j++)//用循环对已找出的str1中进行查重{if(strcmp(str[p],str1[j])==0)//如果有重复,则改变标记flag{flag=1;break;}elsecontinue;}//跳出循环后,对flag进行判断,如果为0说明可以将之前的结果放入str1中,若为1,则说明结果重复,进行下一次的str字符串组的搜寻if(flag==0){strcpy(str[p],str1[k]);k++;}elsecontinue;}}}}
}
int main()
{printf("请输入要比对的字符串数量:\n");int n;//字符串数量scanf("%d",&n);//输入字符串的数量printf("请输入所有要比对的字符串:\n");for(int i=0; i<n; i++) //循环,从而输入所有要匹配的字符串。scanf("%s",&str[i]);match(n,str);//调用匹配函数int i=0;if(k!=0)//说明有结果可以输出{printf("所有重复出现的字符串为:\n");for(i=0;i<k;i++)printf("%s\n",str[i]);}elseprintf("抱歉!没有相同的字符串\n");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译原理:文法及其二义性(判定及消除)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 学编译原理时&#xff0c;会学到文法&#xff0c;老师在介绍完文法的相关定义后又介绍了文法的二义性&#xff0c;但是没说到底是如何避免文法的二…

C语言(CED)与long long相关的知识

在写代码时&#xff0c;有时int、double定义的变量的范围远远小于题目要求的范围&#xff0c;那么现在就是使用long long的时候 1、 long long 是C99标准对整型类型做的一个扩展&#xff0c;每个long long类型的变量可以占8字节&#xff0c;每个字节8位&#xff0c;一共64位。…

C语言(CED)对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式(递归求解)

又涉及到递归问题&#xff0c;这道题的大致内容是这样的&#xff1a; &#xff08;请用递推方式求解&#xff09;对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式。下图是一个2行17列的走道的某种铺法。 提示&#xff1a;观察前n个结果&#xff0c;可以…

C语言(CED)王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数(递归求解)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 题目大意&#xff1a;王老师爬楼梯&#xff0c;他可以每次走1级或者2级&#xff0c;输入楼梯的级数&#xff0c;求不同的走法数。例如&#xff1a;…

C语言(CED)查找最接近的元素(分治法/二分查找):在一个非降序列中,查找与给定值最接近的元素。(递归实现)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 一、题目大意 查找最接近的元素&#xff08;分治法/二分查找&#xff09;&#xff1a;在一个非降序列中&#xff0c;查找与给定值最接近的元素。…

C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

)输出前k大的数&#xff08;分治法/局部快速排序&#xff09;:给定一个数组&#xff0c;统计前k大的数并且把这k个数从大到小输出。 [输入] 第一行包含一个整数n&#xff0c;表示数组的大小。 第二行包含n个整数&#xff0c;表示数组的元素&#xff0c;整数之间以一个空格分…

C语言(CED)最长公共子序列----动态规划第一题

一、动态规划算法与分治法的异同 相同点&#xff1a; A、二者均是将待求解的问题分成若干子问题来求解。 B、二者在编写代码的时候&#xff0c;都要用到递归。 不同点&#xff1a; A、分治法求解的问题&#xff0c;在将问题分成若干子问题之后&#xff0c;其子问…

C语言(CED)01背包——动态规划第二题

一、问题描述 给定n种物品和一个背包。物品i的质量Wi&#xff0c;其价值Vi&#xff0c;背包的容量为c。问如何选择装入背包中的物品&#xff0c;使得装入背包中的物品总价值最大&#xff1f; 二、解题思想 01背包和最长公共子序列都是动态规划题目中求最优解的问题&#xff0…

C语言(CED)gameboy接馅饼问题

一、题目大意 都说天上不会掉馅饼&#xff0c;但有一天gameboy正走在回家的小径上&#xff0c;忽然天上掉下大把大把的馅饼。这馅饼别处都不掉&#xff0c;就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了&#xff0c;所以gameboy马上卸下身上的背包去接。但由…

C语言(CED)递归实现汉诺塔问题

一、问题大意 大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定&#xff0c;任何时候&#xff0c;在小圆盘上都不能放大圆盘&#xff0c;…

C语言(CED)智力大冲浪——贪心算法第一题

一、题目大意 小伟报名参加中央电视台的智力大冲浪节目&#xff0c;本次挑战赛吸引了众多参赛者&#xff0c;主持人为了表彰大家的勇气&#xff0c;先奖励每个参赛者m元。先不要太高兴&#xff01;因为这些钱还不一定都是你的&#xff01;接下来主持人宣布了比赛规则&#xff…

C语言(CED)钢条最优切割收益

目录 一、题目大意 二、大致思路 三、具体实现 一、题目大意 一家公司购买长钢条&#xff0c;将其切割成短钢条出售&#xff0c;切割本身没有成本&#xff0c;长度为i的短钢条的价格为Pi。那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大。提示&…

C语言(CED)如何用sort函数根据结构体里的某一属性进行排序

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 前几天在编写代码的时候&#xff0c;突然要根据结构体的属性进行从小到大的排序&#xff0c;这即是我写这篇文章的导火索。 正如大家所知…

撰写paper时,如何在word里输入图片或其他文献(PDF)里的公式?(更新时间2022.03.01)

我们在写paper时&#xff0c;经常会遇到在Word里编写数学公式的问题&#xff0c;其中大多数公式是已经存在的&#xff0c;所以只需要识别、复制、粘贴即可&#xff0c;那么接下来&#xff0c;我就介绍一下“Mathtype”“Mathpix”的方法&#xff0c;分为所需软件、软件操作、公…

家里接入某运营商300M宽带,为何网速还是很慢?(还未装修房屋的请进来)

&#xff08;请先看置顶博文&#xff09;本博打开方式&#xff0c;请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 引言&#xff1a;家里接入300M的宽带&#xff0c;但是自我感觉网速不佳&#xff0c;遂结合所学知识&#xff0c;对此问题进行分析、研究和调察&…

(CED)列指针与行指针的联系与区别

一、列指针&#xff08;竖为列&#xff09; 1、列指针相关定义 列指针&#xff1a;被称为是指针变量指向二维数组的某个元素 一般使用时会有如下定义&#xff1a; int a[3][4]{1,2,3,4,5,6,7,8,9,10,11,12}; int *p;而上述代码定义的指针p&#xff0c;一般按照下表方式指向…

C语言(CED)C语言中双引号和单引号的区别

最简单的区别&#xff1a; 在字符型变量赋初值时&#xff0c;用单引号&#xff1b;为字符串变量赋初值时用双引号&#xff01; 具体区别&#xff1a; 1、大小 单引号引起的一个字符&#xff0c;其大小为1个Byte。 双引号引起的字符串&#xff0c;因为在其结尾需加一个二进…

一、Pytho第一课——Python安装及配置路径方法(最详细小白教程,没有之一。如若不懂,不是还可以私信嘛!对吧?)

目录 一、下载软件 二、安装 三、编辑器 四、在Pycharm上成功运行Python程序&#xff08;配置Python解释器&#xff09; 一、下载软件 官方下载地址&#xff1a;https://www.python.org/downloads/&#xff08;打开似乎很吃力&#xff0c;必要时刻“挂灯”&#xff09; …

二、Python第二课——变量命名规则及字符串变量相关函数

目录 一、变量命名规则 二、字符串变量及相关函数 1、字符串变量 2、相关函数 最后琐碎杂物&#xff1a; 1、字符串之间的拼接 2、字符串格式控制&#xff08;制表符和换行&#xff09; 一、变量命名规则 正如其他编程语言一样&#xff0c;程序离不开声明变量&#x…

三、Python第三课——Python中数字的用法及编码原则(Python禅意)

目录 一、Python中的数字 1、整数 2、浮点数 3、整数、浮点数和字符串的联系和区别 二、编码原则 1、为代码增加注释 2、Python 禅意 A、编码精美 B、避繁就简 C、无简就繁 D、使用常规方法解决问题 E、先有效、再精巧、逐步升华 一、Python中的数字 编程中&#…