前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >那些年我们一起忘掉的C (十五).字符串交并集

那些年我们一起忘掉的C (十五).字符串交并集

作者头像
franket
发布2021-10-18 10:44:24
2570
发布2021-10-18 10:44:24
举报
文章被收录于专栏:技术杂记

前言

熟练运用字符型指针可以灵活操作字符串,将一个任务进行逻辑拆解,分解出元操作,可以获得很好效果


概要


将任意给定的两个字符串取交集取并集

写一个函数将任意给定的两个字符串取交集

函数原型为:

char *jiaoji(char *s,char *s1,char *s2);

若s1: abcddebcdf ==》去重后的s1 abcdef

s2: bcdfgb

则返回的是 s: bcdf

写一个函数将任意给定的两个字符串取并集

函数原型为:

char *bingji(char *s,char *s1,char *s2);

若s1: abcdde

s2: bcdfg

则返回的是 abcdefg

代码注解

代码语言:javascript
复制
#include <stdio.h>
#define LENGTH 20

int findc(char *s,char c) //这个函数用来判断给定的字符是否存在于给定的字符串中
{
	for(; *s != '\0';s++) if( *s == c ) return 1; //遍历s指针指定的字符串,如果其中存在一个字符与给定字符相等就返回整数1
	return 0; //遍历完还没找到就返回整数0
}

char *jiaoji(char *s,char *s1,char *s2)
{
	char *p=s;
	for(; *s1 != '\0';s1++)	//遍历字符型指针s1所指定的字符串
	{
		if ( findc(s2,*s1) == 1 && findc(s,*s1) == 0  )  //如果字符*s1存在于s2(所指定的字符串)中并且不存在于s(所指定的字符串)中
		{
			*p = *s1; //就将*s1字符保存到*p(s所指定的字符型数组)中
			p++; //后移一位,为下一次存储作准备
		}
	}
	*p = '\0'; //加上字符串结束符
	return s; //将结果集的指针返回
}

char *bingji(char *s,char *s1,char *s2)
{
	char *p=s;
	for(; *s1 != '\0';s1++) //遍历字符型指针s1所指定的字符串
	{
		if ( findc(s,*s1) == 0  ) //如果字符*s1不存在于s(所指定的字符串)中
		{
			*p = *s1; //就将*s1字符保存到*p(s所指定的字符型数组)中
			p++; //后移一位,为下一次存储作准备
		}
	}
	for(; *s2 != '\0';s2++) //遍历字符型指针s2所指定的字符串
	{

		if ( findc(s,*s2) == 0  )  //如果字符*s2不存在于s(所指定的字符串)中
		{
			*p = *s2; //就将*s2字符保存到*p(s所指定的字符型数组)中
			p++; //后移一位,为下一次存储作准备
		}
	}
	*p = '\0'; //加上字符串结束符
	return s; //将结果集的指针返回
}


void main()
{	
	char str[LENGTH],st[LENGTH],s[2*LENGTH]="\0"; 
	printf("please input two strings (less then %d length):\n",LENGTH);
	scanf("%s%s",str,st);
	printf("the two strings are : %s %s\n",str,st);
	printf("the jiaoji string is : %s\n",jiaoji(s,str,st));
	printf("the bingji string is : %s\n",bingji(s,str,st));
}

思路

交集就是存在于string1中同时也存在于string2中的那些字符,并集就是存在于string1中或者存在于string2中的那些字符,是否重复就是一个字符是否已经存在于给定字符串中

明白了这些基本概念后,我们只用实现一个可以判断给定字符是否存在于给定字符串中的函数,再加上基本的遍历就可以拼接出上面的功能需求

基础知识点

  • 指针作为函数参数
  • 函数的返回值

原文地址

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 概要
    • 将任意给定的两个字符串取交集取并集
      • 代码注解
      • 思路
      • 基础知识点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档