隨筆 - 303  文章 - 883  trackbacks - 0
          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          歡迎光臨! 
          閑聊 QQ:1074961813

          隨筆分類(357)

          我管理的群

          公共blog

          • n維空間
          • Email : java3d@126.com 群 : 12999758

          參與管理的論壇

          好友的blog

          我的其他blog

          朋友的網站

          搜索

          •  

          最新評論

          用c語言實現函數strcasestr。函數原型:char*strcasestr(const char*haystack,const char*needle) 函數返回字符串指針,指向字符串haystack中第一次出現字符串needle的開始位置,字串匹配時忽略大小寫,如果沒有找到字符串,返回null,完成代碼后,給出5個以上的單元測試用例,以證明你的程序在各種條件下能夠正確運行

          代碼一:

          本人的代碼(編譯環境VC6.0) 請多多指教! 
          #include<iostream>
          #include
          <string>
          using namespace std;

          char*strcasestr(const char*haystack,const char*needle);
          char*bigtolit(const char*str);

          main()
          {
              
          //五個的測試程序
              cout<<strcasestr("abcDEfghi","EF")<<endl;
              cout
          <<strcasestr("111223","11223")<<endl;
              cout
          <<strcasestr("tshihisih","ss")<<endl;
              cout
          <<strcasestr("tshihisih","si")<<endl;
              cout
          <<strcasestr("tshihfsfsah","fsa")<<endl;

            
          return 0;
          }


          char*strcasestr(const char*haystack,const char*needle)
          {
              
          string str = bigtolit(haystack);
              
          string str1 = bigtolit(needle);

              
          int pos = str.find(str1);

              
          if(0 != (pos+1))
              
          {
                  
          char *= new char;
                  itoa((pos
          +1),c,10);
                  
          return c;
              }

              
          else
              
          {
                  
          char *= "NULL";
                  
          return c;
              }

          }


          char*bigtolit(const char*str)
          {
              
          char *hay = new char;
              memset(hay,
          0,sizeof(hay));

              
          for(int i=0;i<strlen(str);i++)
              
          {   
                  hay[i] 
          = tolower(str[i]);     
              }

              
              
          return hay;
          }
           
          運行結果:
          5
          2
          NULL
          7
          8



          代碼二:


          群里IT007朋友寫的

          #include <string.h>
          #include 
          <stdio.h>


          char* strcasestr(const char *haystack,const char *needle);

          main()
          {
              
          char  str1[100];
              
          char  str2[50];
              
          char* str;


              
          do{
                  
                  system(
          "cls");

                  printf(
          "請分別輸入長度不大于100和長度不大于50的兩個字符串(用空格或者回車隔開):\n");
                  
                  scanf(
          "%s%s",str1,str2);

                  
          if(strlen(str1)>100||strlen(str2)>50){
                      printf(
          "\n對不起,你輸入的字符串過長,請重新輸入再來!");
                      
          continue;
                  }


                str
          =strcasestr((const char*)str1,(const char*)str2);

                
          if(!str){
                      printf(
          "父串中查找不到與子串匹配的串!\n按Q鍵退出,其它任意鍵繼續!\n");
                      
          continue;
                  }


              printf(
          "父串中第一個與子串匹配串的位置為:%d\n",str-str1+1);

              printf(
          "按Q鍵退出,其它任意鍵繼續!\n");

              }
          while(getch()!='q');
          }




          //////////////指針版的查找子串在源串中的位置的函數/////////////////
          //加強錯誤處理之后的函數
          //1。當子串為空時進行了處理
          //2。當子串比源串要長時
          //3。每次比較完之后,父串的指針只向前移動一位
          //4。現在可以進行勿略大小寫的判斷比較了(最新)
          //5。修正了一個BUG,即不能進行字母A、a、Z、z的忽略大小寫的判斷
          //6。對忽略大小寫部分的判斷進行了代碼,代碼明顯少了些(最新)
          ////////////////////////////////////////////////////////////////////


          /*
          ////////////////////////////

          函數原型:char *strcasestr(const char *haystack,const char *needle) 

          函數功能:指向字符串haystack中第一次出現字符串needle的開始位置,
                    字串匹配時忽略大小寫,如果沒有找到字符串,返回null.

          ///////////////////////////
          */


          char* strcasestr(const char* haystack,const char* needle)
          {
              
          int i=0;
              
          while(*haystack&&*needle){            
                    
          while(*haystack==*needle||\
                        
          *haystack==((*needle>='a'&&*needle<='z')?*needle-32:*needle)||\
                        
          *haystack==((*needle>='A'&&*needle<='Z')?*needle+32:*needle)){
                      
          if(!*(++needle))return  (char*)haystack-i;
                      
          if(!*(++haystack))return 0;
                      i
          ++;
                  }

                  needle
          -=i;
                  
          //haystack=haystack-i+1;
                  haystack-=(i-1);
                  i
          =0;
              }

              
          return 0;
          }


          運行結果:
          請分別輸入長度不大于100和長度不大于50的兩個字符串(用空格或者回車隔開):
          FFadbcdddDD
          DDd
          父串中第一個與子串匹配串的位置為:
          7
          按Q鍵退出,其它任意鍵繼續
          !


          地震讓大伙知道:居安思危,才是生存之道。
          posted on 2007-11-16 13:37 小尋 閱讀(2855) 評論(2)  編輯  收藏 所屬分類: c/c++/C#/pasic/vb/php/asp(.net)/win-cgi/xml...

          FeedBack:
          # re: C字符串處理 2008-02-29 13:01 sPhinX
          “用c語言實現函數strcasestr。”

          #include<iostream>
          #include<string>
          using namespace std;

          這好像是題意都沒有讀懂吧。

          這樣的庫函數我是不敢用,你呢?  回復  更多評論
            
          # re: C字符串處理[未登錄] 2008-02-29 15:52 尋覓
          呵呵^_^
          非常感謝您的指正
          有時間 我定改過來   回復  更多評論
            
          主站蜘蛛池模板: 体育| 疏附县| 达孜县| 尼勒克县| 金阳县| 龙口市| 揭阳市| 宁陵县| 玉溪市| 修文县| 平安县| 山阴县| 沧源| 磴口县| 阿荣旗| 石嘴山市| 浑源县| 玛纳斯县| 若尔盖县| 南宁市| 逊克县| 阜新| 保康县| 宁海县| 天水市| 万盛区| 铜陵市| 彭山县| 克山县| 晴隆县| 馆陶县| 合山市| 尼木县| 临西县| 正阳县| 砚山县| 洱源县| 福泉市| 山丹县| 盐边县| 嘉鱼县|