熟练运用字符型指针可以灵活操作字符串,将一个任务进行逻辑拆解,分解出元操作,可以获得很好效果
写一个函数将任意给定的两个字符串取交集
函数原型为:
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
#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 删除。