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

求两个字符串的交集,看似简单,实则需要考虑的细节很多,下面分享c语言求两个字符串交集的方法。


一、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
#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("%sn",tt);        //供检验使用
    //printf("%sn",pp);   
    strcat(tt,pp);
    //printf("%sn",tt);
    p=fun2(tt);                 //调用函数
    for(i=0;*(p+i)!='';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
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]='';                 //此时最后一项与倒数第二项相同,用''彻底抹除左后一                       
                                        //项(目的是去除' '字符串缩短)
            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

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]='';                         //最后加上''一来这是个字符串,二来main()函数中作为                
                                        //for循环结束条件
    p=&aa[0];                           //确定第一个字符的地址
  
    return p;                           //返回地址
}


注意;

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

其他思路推荐:

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

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


郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: