这期内容当中小编将会给大家带来有关如何用C语言求两个字符串的交集,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。求两个字符串的交集,看似简单,实则需要考虑的细节很多。我的思路:将两个字符串简化,将里面重复的
这期内容当中小编将会给大家带来有关如何用C语言求两个字符串的交集,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
求两个字符串的交集,看似简单,实则需要考虑的细节很多。
我的思路:
将两个字符串简化,将里面重复的字母减少为一个。
拼接两个字符串,借助循环把重复出现两次的字符找出来。
有了思路开始写代码。
思路:
定义两个储存字符串的数组tt[M],pp[M]
定义指针*p接收fun2() 返回值,输出交集
输入两个字符串(此处注意越界问题)
调用函数
输出交集
#include <stdio.h>#include <string.h> //用到strcat(),strlen()函数 #define M 50 void fun1(char tt[]); //将字符串中相同的字母去掉char *fun2(char tt[]); //将重复的(子集)找出来 int main(){ char tt[M],pp[M]; //定义两个数组,储存字符串 char *p; //接受fun2()返回的地址,并输出交集字符串 int i; gets(tt); //abcdef123abc12 gets(pp); //acef123ace124 fun1(tt); //调用函数 fun1(pp); //printf("%s\n",tt); //供检验使用 //printf("%s\n",pp); strcat(tt,pp); //printf("%s\n",tt); p=fun2(tt); //调用函数 for(i=0;*(p+i)!='\0';i++) { printf("%c",*(p+i)); //acef123 } return 0;}
fun1()作用是将字符串中重复的字符只保留一个
思路:
先将重复出现的字符出去第一次出现那个都换成' '(此处为一个空格)
在将字符串数组元素移动,去除' '(空格)
void fun1(char tt[]) //将重复的字符抹掉{ int i,j; char ch; for(i=0;i<M;i++) { if(tt[i]!=' ') //确保确定的这一项不是空格 { ch=tt[i]; //确定第一次出现的字符 for(j=i+1;j<M;j++) //在他后方寻找 { if(ch==tt[j]) //遇到一样的 tt[j]=' '; //用' '替换 } } } for(i=0;i<strlen(tt);i++) { if(tt[i]==' ') //找到' '位置 { for(j=i;j<strlen(tt)-1;j++) //去除' ' tt[j]=tt[j+1]; tt[j]='\0'; //此时最后一项与倒数第二项相同,用'\0'彻底抹除左后一 //项(目的是去除' '字符串缩短) i--; } //防止连续出现多个' '(假如没有i--,此时tt[i]仍然为' //'运行下一步为i++,这个空格就被保留下来了) }}
fun2()将重复出现的字符挑出来
思路:
找到相同字符,并储存在static aa[M]中(小重点)
返回第一个字符的地址
char *fun2(char tt[]) //确定子集字符串,返回字符串第一个字符的地址{ int i,j,k; char ch; static char aa[M]; //静态变量,保证调用函数结束后数组还在 char *p; k=0; for(i=0;i<strlen(tt);i++) { ch=tt[i]; //确定第一次出现的字符 for(j=i+1;j<strlen(tt);j++) { if(ch==tt[j]) //如果再次出现一个相同的字符将他赋值给aa[M]数组 { aa[k]=ch; k++; } } } aa[k]='\0'; //最后加上'\0'一来这是个字符串,二来main()函数中作为 //for循环结束条件 p=&aa[0]; //确定第一个字符的地址 return p; //返回地址}
这个代码任然后缺陷,因为用这个代码求得两个字符串的交集永远不会出现空格。
其他思路推荐:
先在第一个字符串中确定一个字符,在第二个字符串中查找是否存在相同字符串
这条思路特要注意字符串中字符重复出现带来的影响
上述就是小编为大家分享的如何用c语言求两个字符串的交集了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网其他教程频道。
--结束END--
本文标题: 如何用c语言求两个字符串的交集
本文链接: https://www.lsjlt.com/news/303433.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0