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

          歡迎光臨! 
          閑聊 QQ:1074961813

          隨筆分類(357)

          我管理的群

          公共blog

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

          參與管理的論壇

          好友的blog

          我的其他blog

          朋友的網(wǎng)站

          搜索

          •  

          最新評論

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

          代碼一:

          本人的代碼(編譯環(huán)境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;
          }
           
          運行結(jié)果:
          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鍵退出,其它任意鍵繼續(xù)!\n");
                      
          continue;
                  }


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

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

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




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


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

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

          函數(shù)功能:指向字符串haystack中第一次出現(xiàn)字符串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;
          }


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


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

          FeedBack:
          # re: C字符串處理 2008-02-29 13:01 sPhinX
          “用c語言實現(xiàn)函數(shù)strcasestr?!?

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

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

          這樣的庫函數(shù)我是不敢用,你呢?  回復(fù)  更多評論
            
          # re: C字符串處理[未登錄] 2008-02-29 15:52 尋覓
          呵呵^_^
          非常感謝您的指正
          有時間 我定改過來   回復(fù)  更多評論
            
          主站蜘蛛池模板: 金沙县| 赣榆县| 攀枝花市| 宁南县| 临西县| 石门县| 肇庆市| 镇康县| 五家渠市| 阜康市| 凯里市| 招远市| 邳州市| 区。| 通城县| 通化县| 康定县| 武川县| 唐河县| 邢台县| 浮梁县| 白银市| 丰顺县| 凤冈县| 南涧| 慈溪市| 高州市| 紫阳县| 昭苏县| 怀来县| 北宁市| 曲周县| 嘉定区| 辽阳市| 土默特左旗| 杭州市| 屯留县| 托克逊县| 万载县| 鸡东县| 和龙市|