乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C語言中的strstr函數(shù)

       aa11xx22 2015-05-26

      C語言中的strstr函數(shù)

       

        早上翻《C和指針》,碰見一個子串查找問題,這個問題在C標(biāo)準(zhǔn)庫中有模板,即strstr函數(shù),其原型是char*strstr(const char*s1,const char* s2);

        這個函數(shù)的作用是在s1中查找子串s2,如果找到,則返回s1中s2的位置。否則返回NULL。

        雖說函數(shù)庫中存在解決方案,但還是想親自動手實踐一下。于是開始編程,思路很簡單,分兩步,第一,判斷s2是不是空的,或者s2的長度是不是小于s1的長度;第二,在s1中遍歷查找與s2第一個字符匹配的字母,如找到,則進行下一個字符匹配。如找不到,則返回空指針。

        結(jié)果卻都失敗了。每次都碰見內(nèi)存報錯問題。仔細檢查也沒找到錯誤原因。

        在網(wǎng)上百度了一個答案(見附錄),才明白這其實涉及了一個字符匹配算法問題。而我的代碼明顯想簡單了,所以沒有成功。字符匹配算法中最常用的是KMP,這個算法說來話長,先挖個坑吧,以后有空再來好好研究它。

      復(fù)制代碼
       1 #include <stdio.h>
       2 #include<string.h>
       3 
       4 char * strrstr(char const *s1,char const *s2){
       5  char *p2s1=(char*)s1;
       6  char *p2s2=(char*)s2;
       7 
       8 int i,j,m,n,k;
       9 i=k=0;
      10 j=0;
      11 while(i<strlen(s1)&&j<strlen(s2))
      12 {
      13  if(*(p2s1+i)==*(p2s2+j))
      14  {
      15  i++;
      16  j++;
      17  }
      18 else
      19  {
      20  j=0;k++;
      21  i=k;//可用于記錄原來i的位置 ;
      22  
      23   
      24  }
      25 }
      26 
      27 if(j>=strlen(s2))//判斷找到字符串的條件
      28  {
      29  printf("找到字符串%s",s2);
      30  return (p2s1+i);
      31 } 
      32 else
      33  {
      34      printf("未找到字符串%s\n",s2); 
      35       return NULL;
      36  }
      37 
      38 
      39 }
      40 int main()
      41 {
      42 char a[]="abcdefghijkl";
      43 char b[]="fgi";
      44 
      45 char* c;
      46 c=strrstr(a,b);
      47 
      48 
      49 return 0;
      50 
      51 
      52 }
      復(fù)制代碼

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多