当前位置: 首页 > 科技观察

【字符串处理算法】字符串包含的算法设计及C代码实现_0

时间:2023-03-16 02:13:52 科技观察

一、需求描述给定一个长字符串和一个短字符串,编写程序判断短字符串中的所有字符是否都在长字符串中细绳。如果是,则长字符串包含短字符串;否则,它不会。为了尽可能覆盖大部分情况,字符串可以包含大小写英文字母、数字和各种标点符号,并区分大小写字母。下面举几个例子来说明:1、如果长串是“ABCDE”,短串是“ADC”,那么短串中的所有字符都在长串中,即长串中包含短串字符字符串。2、如果长串是“ABCDE”,短串是“ADCF”,那么短串中的字符并非都在长串中,即长串中不包含短串。3、如果长串是“ABCDE”,短串是“AAB”,那么短串中的所有字符都在长串中,即长串包含短串。2.算法设计我们都知道,就像人体是由一个个细胞组成的一样,一个字符串也是由一个个字符组成的。如果组成一个字符串的所有字符都在另一个字符串中,则该字符串被另一个字符串包含。因此,我们可以考虑先找出两个字符串中的所有字符,然后再判断较短的字符串中的所有字符是否都出现在较长的字符串中。如果是,那么这两个字符串是包含和被包含的关系;如果不是,则这两个字符串是“奇怪的”。程序总体流程如图1所示。图1程序总体流程3.特殊流程注意事项在编写程序的过程中,我们需要考虑两个输入字符串的长度和格式,例如:1、如果输入错误,短字符串的长度大于如果输入长字符串,程序直接返回,不做后续处理。2.输入字符串中间不允许有空格。如果有,则只能将空格前的内容作为输入字符串。3、输入的字符串可以包含字母(区分大小写)、数字、标点符号等字符。4、为了程序处理方便,设置最长字符串为500字节,最长字符串为100字节。4.程序代码/***************************************************************************Copyright(C)2016,ZhouZhaoxion.**文件名:StringContains.c*文件ID:无*内容概要:判断一个字符串是否是另一个字符串的子串*其他说明:例如“ABC”是“ABCD”的子串*当前版本:V1.0*作者:周兆雄*完成日期:20160216*****************************************************************************/#include#include//重新定义datatypetypedefsignedcharINT8;typedefunsignedshortintUINT16;typedefintINT32;typedefunsignedintUINT32;//存储字符串结构中的字符和格式typedefstruct{INT8szStrCharArray[101][2];//存储字符串中不同字符的数组,***支持100个INT32iStrCharCount;//字符串中不同字符的个数}StrInfo_T;StrInfo_TgtLongerStrInfo={0};StrInfo_TgtShorterStrInfo={0};//函数声明voidGetStrChar(INT8*pszInputStr,INT32iProcessFlag);INT32JudgeIfContainsStr();/****************************************************************************函数说明:主函数*输入参数:无*输出参数:无*返回值:0-执行成功其他-执行失败*其他说明:无*修改日期版本号修改人修改内容*--------------------------------------------------------------*20160216V1.0ZhouZhaoxiong创建*****************************************************************************/INT32main(){INT8szLongerStr[500]={0};INT8szShorterStr[100]={0};UINT32iContainFlag=1;//包含标志,1-包含,0-不包含printf("请输入较长的字符串:\n");scanf("%s",szLongerStr);printf("LongerStr=%s\n",szLongerStr);printf("请输入较短的字符串:\n");scanf("%s",szShorterStr);printf("ShorterStr=%s\n",szShorterStr);//如果ShorterStr的长度大于LongerStr,直接返回if(strlen(szShorterStr)>strlen(szLongerStr)){printf("%sislongerthan%s,pleasecheck!\n",szShorterStr,szLongerStr);return-1;}//获取较长字符串中的不同字符GetStrChar(szLongerStr,1);//获取较短字符串中的不同字符GetStrChar(szShorterStr,2);iContainFlag=JudgeIfContainsStr();if(iContainFlag==0){printf("%s不包含%s!\n",szLongerStr,szShorterStr);}else{printf("%s包含%s!\n",szLongerStr,szShorterStr);}return0;}/******************************************************************************函数说明:获取字符串中的不同字符及其个数*输入参数:pszInputStr-输入字符串iProcessFlag-处理标志(1:进程longstrings,2:processshortstrings)*输出参数:无*返回值:无*其他说明:无*修改日期版本号修改人修改内容*--------------------------------------------------------------*20160216V1.0ZhouZhaoxiong创建******************************************************************************/voidGetStrChar(INT8*pszInputStr,INT32iProcessFlag){INT32iCharCount=0;//字符个数INT8szInputStr[501]={0};INT8szCharBuf[2]={0};//存储单个的缓存字符INT32iRepeatFlag=0;UINT32iStrPosFlag=0;UINT32iLoopF??lag=0;UINT32iInputStrLen=0;if(pszInputStr==NULL){return;}iInputStrLen=strlen(pszInputStr);if(iInputStrLen>=500)//***支持100个字母{return;}memcpy(szInputStr,pszInputStr,iInputStrLen);iCharCount=0;for(iStrPosFlag=0;iStrPosFlag

最新推荐
猜你喜欢