首页 > 作文

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

更新时间:2023-04-04 09:48:38 阅读: 评论:0

目录
一、main()函数二、fun1()函数三、fun2()函数注意;总结

求两个字符串的交集,看似简单,实则需要考虑的细节很多。

我的思路:

1.将两个字符串简化,将里面重复的字母减少为一个。

2.拼接两个字符串,借助循环把重复出现两次的字符找出来。

有了思路开始写代码。

一、main()函数

思路:

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()函数

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()函数

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图