服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - c语言求两个字符串的交集

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

2022-08-07 12:12半夜偷吃雪糕 C/C++

大家好,本篇文章主要讲的是c语言求两个字符串的交集,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

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

我的思路:

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

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

有了思路开始写代码。

一、main()函数

思路:

1.定义两个储存字符串的数组tt[M],pp[M]

2.定义指针*p接收fun2() 返回值,输出交集

3.输入两个字符串(此处注意越界问题)

4.调用函数

5.输出交集

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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.在将字符串数组元素移动,去除' '(空格)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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.返回第一个字符的地址

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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语言字符串交集内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_62416768/article/details/122279614

延伸 · 阅读

精彩推荐
  • C/C++C++实现的泛型List类分享

    C++实现的泛型List类分享

    这篇文章主要介绍了C++实现的泛型List类分享,参考C#的List功能实现,需要的朋友可以参考下...

    C++教程网5122021-01-22
  • C/C++C++调用tensorflow教程

    C++调用tensorflow教程

    今天小编就为大家分享一篇关于C++调用tensorflow教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    Panda_Peng11712021-07-02
  • C/C++C++实现发送邮件和附件功能

    C++实现发送邮件和附件功能

    这篇文章主要为大家详细介绍了C++实现发送邮件和附件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    ybjx1117792021-06-25
  • C/C++C++ typeid 和虚函数详解

    C++ typeid 和虚函数详解

    这篇文章主要介绍了c++ typeid 和虚函数的使用,帮助大家更好的理解和使用c++,感兴趣的朋友可以了解下,希望能够给你带来帮助...

    chls6822021-12-31
  • C/C++C++实现简单的信息管理系统

    C++实现简单的信息管理系统

    这篇文章主要为大家介绍了C++实现简单的信息管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    仙桃李远航6342021-03-30
  • C/C++简单好用的C语言偏门知识,复合文字,编程小知识值得拥有

    简单好用的C语言偏门知识,复合文字,编程小知识值得拥有

    本文主要介绍一些C语言的一些偏门知识给大家,在这里简单谈一下C语言复合文字。需要读者具备一定的C语言基础。...

    C语言基础10372021-03-10
  • C/C++c语言10个经典小程序

    c语言10个经典小程序

    c语言的经典程序,学习c语言的初学者可以参考下...

    C语言教程网3302020-11-17
  • C/C++C++中int类型按字节打印输出的方法

    C++中int类型按字节打印输出的方法

    这篇文章主要给大家介绍了关于C++中int类型按字节打印输出的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价...

    shell_nut7542021-07-28