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

 更新时间:2022年01月04日 11:36:46   作者:半夜偷吃雪糕  
大家好,本篇文章主要讲的是c语言求两个字符串的交集,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

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

我的思路:

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)!='\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]='\0';                 //此时最后一项与倒数第二项相同,用'\0'彻底抹除左后一                        
                                        //项(目的是去除' '字符串缩短)
            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]='\0';                         //最后加上'\0'一来这是个字符串,二来main()函数中作为                 
                                        //for循环结束条件
    p=&aa[0];                           //确定第一个字符的地址
 
    return p;                           //返回地址
}

注意;

这个代码任然后缺陷,因为用这个代码求得两个字符串的交集永远不会出现空格。

其他思路推荐:

先在第一个字符串中确定一个字符,在第二个字符串中查找是否存在相同字符串

这条思路特要注意字符串中字符重复出现带来的影响

总结

到此这篇关于c语言求两个字符串的交集的文章就介绍到这了,更多相关c语言字符串交集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用C语言实现五子棋小游戏

    用C语言实现五子棋小游戏

    这篇文章主要为大家详细介绍了用C语言实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C语言常用标准头文件使用实例

    C语言常用标准头文件使用实例

    在C的系列语言程序中,头文件(通常扩展名为.h)被大量使用,它通常包含函数、变量、结构体等的声明和定义,以及一些宏定义和类型定义,这篇文章主要给大家介绍了关于C语言常用标准头文件使用的相关资料,需要的朋友可以参考下
    2024-08-08
  • C经典算法之二分查找法

    C经典算法之二分查找法

    这篇文章主要介绍了C经典算法之二分查找法的相关资料,这里提供两种方法帮助大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • 详解dll动态库的开发与调用及文件的读写小程序

    详解dll动态库的开发与调用及文件的读写小程序

    这篇文章主要介绍了详解dll动态库的开发与调用及文件的读写小程序的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • C/C++ 常用排序算法整理汇总分享

    C/C++ 常用排序算法整理汇总分享

    排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。本篇整理了c语言和c++的常用的排序算法,感兴趣的朋友可以参考下
    2021-06-06
  • C语言数据结构之顺序数组的实现

    C语言数据结构之顺序数组的实现

    这篇文章主要介绍了C语言数据结构之顺序数组的实现的相关资料,这里提供实现实例,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • c语言读取txt文件内容简单实例

    c语言读取txt文件内容简单实例

    在本篇文章里小编给大家整理的是关于c语言如何读取txt文件内容,需要的朋友们可以参考下。
    2020-03-03
  • C++中map和set的使用详细攻略

    C++中map和set的使用详细攻略

    set set是一种关联式容器,下面这篇文章主要给大家介绍了关于C++中map和set使用的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • 线程按指定顺序输出字符到数组的实例代码

    线程按指定顺序输出字符到数组的实例代码

    这篇文章主要介绍了线程按指定顺序输出字符到数组的实例代码,需要的朋友可以参考下
    2014-02-02
  • C语言深入探索递归的特点

    C语言深入探索递归的特点

    程序调⽤⾃⾝的编程技巧称为递归 recursion)函数⾃⼰调⽤⾃⼰就是递归,你也可以理解成是⼀种嵌套结构,但递归分为俩部分,第⼀是“递”,进⼊嵌套结构。第⼆是”归“,最终会⼀步⼀步返回。第⼀次接触递归都会很懵,慢慢理解这个过程就明⽩了
    2022-06-06

最新评论