關於C語言字串操作的幾個題目

來源:互聯網
上載者:User

第一題是:寫一函數,實現刪除字串str1中含有的字串str2。這一題不難,但是有個 KMP最佳化演算法,大家有興趣可以查看資料看一下。

第二題是:給定的字串A和B,輸出A和B中的最大公用子串。本人的代碼是:

#include<stdio.h>#include<string.h>void UtMost_ComStr(char* s1,char* s2)//imagine: s1 is longer{int maxLength=0,length=0,i=0;char *p1=s1,*p1_1=s1,*p2=s2,*p2_2=s2;;char *maxStartAddr=s1;while(*p1!=0){if(*p1==*p2){length++;if(length>maxLength){maxLength=length;maxStartAddr=p1_1;}p1++;p2++;}else if((*p1!=*p2)&& *p2!=0){length=0;p1=p1_1;p2_2++;p2=p2_2;}else if(*p2==0){length=0;p1_1=s1++;p1=p1_1;p2_2=s2;p2=p2_2;}}printf("Max Length is %d\n",maxLength);printf("The longest same string is:\n");while(i<maxLength){putchar(*maxStartAddr);i++;maxStartAddr++;}}void main(){char *s1="aocdfe";char *s2="pmcdfa";UtMost_ComStr(s1,s2);}
本人又從網上看了別人寫的演算法,發現有幾個操作字串很方便的函數:如下
char *commanstring(char shortstring[], char longstring[]){int i, j;char *substring=malloc(256);if(strstr(longstring, shortstring)!=NULL) //如果……,那麼返回shortstringreturn shortstring;for(i=strlen(shortstring)-1;i>0; i--) //否則,開始迴圈計算{for(j=0; j<=strlen(shortstring)-i; j++){memcpy(substring, &shortstring[j], i);substring[i]='\0';if(strstr(longstring, substring)!=NULL)return substring;}}return NULL;}main(){char *str1=malloc(256);char *str2=malloc(256);char *comman=NULL;gets(str1);gets(str2);if(strlen(str1)>strlen(str2)) //將短的字串放前面comman=commanstring(str2, str1);elsecomman=commanstring(str1, str2);printf("the longest comman string is: %s\n", comman);}


該演算法其中的精髓就在於strstr()這個函數,在此學習了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.