求两个字符串的交集,看似简单,实则需要考虑的细节很多。
我的思路:
1.将两个字符串简化,将里面重复的字母减少为一个。
2.拼接两个字符串,借助循环把重复出现两次的字符找出来。
有了思路开始写代码。
思路:
1.定义两个储存字符串的数组tt[m],pp[m]
2.定义指针*p接收fun2() 返回值,输出交集
3.输入两个字符串(此处注意越界问题)
4.调用函数
5.输出交集
#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)!='#include <stdio.h>#include <string.h> //用到strcat(),strlen()函数#define m 50void fun1(char tt[]); //将字符串中相同的字母去掉char *fun2(char tt[]); //将重复的(子集)找出来int main(){char tt[m],pp[m]; //定义两个数组,储存字符串char *p; //接受fun2()返回的地址,并输出交集字符串int i;gets(tt); //abcdef123abc12gets(pp); //acef123ace124fun1(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;}';i++) { printf("%c",*(p+i)); //acef123 } return 0;}
fun1()作用是将字符串中重复的字符只保留一神州十三号个
思路:
1.先将重复出现的字符出去第一次出现那个都换成’ ‘(此处为一个空格)
2.在将字符串数组元素移动,去除’ ‘(空格)
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]='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++,这个空格就被保留下来了)}}'; //此时最后一项与倒数第二项相同,用'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++,这个空格就被保留下来了)}}'彻底抹除左后一 //项(目的是去除' '字符串缩短) i--; } //防止连续出现多个' '(假如没有i--,此时tt[i]仍然为' //'运行下一步为i++,这个空格就被保留下来了) }}
fun2()将重复出现的字符挑出来
思路:
1.找到相同字符,并储存在static aa[m]中(小重点)
2.返回第一个字符的地址
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]='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; //返回地址}'; //最后加上'ch大年初一的拜年吉祥话ar *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; //返回地址}'一来这是个字符串,二来main()函数中作为 企业安全生产责任制 //for循环结束条件 p=&aa[0]; //确定第一个字符的地址 return p; //返回地址}
这个代码任然后缺陷,因为用这个代码求得两个字符串的交集永远不会出现空格。
其他思路推荐:
先在第一个字符串中确定一个字符,在第二个字符串中查找是否存在相同字符串
这条思路特要注意字符串中字符重复出现带来的影响
到此这篇关于c语言求两个字符串的交集的文章就介绍到这了,更多相关c语言字符串交集内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 09:48:36,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/a0db3ece4e752c0730c7aa4634fbe0f9.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:c语言求两个字符串的交集.doc
本文 PDF 下载地址:c语言求两个字符串的交集.pdf
留言与评论(共有 0 条评论) |