• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            XY

            沒有任何借口
            posts - 9, comments - 31, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
            今天看《C和指針》一書的第6章指針,碰到編程練習(xí)的第一題,做了做,感覺差距還很大,把做的代碼貼下來,以備往后溫習(xí)。
            題目:
                   請編寫一個函數(shù),它在一個字符串中進行搜索,查找所有在一個給定字符集合中出現(xiàn)的字符。這個函數(shù)的原型如下:char *find(char const *source, char const *chars);
                   它的基本想法是查找source字符串中匹配chars字符串中任何字符的第一個字符。函數(shù)然后返回一個指向source中第1個匹配所找到的位置的指針。如果source中的所有字符均不匹配chars中的任何字符,函數(shù)就返回一個NULL指針。如果任何一個參數(shù)為NULL,或任何一個參數(shù)所指向的字符串為空,函數(shù)也返回一個NULL指針。
                   舉個例子,假定source指向ABCDEF。如果chars指向XYZ、JUEY或QQQQ,函數(shù)就返回一個NULL指針。如果chars指向XRCQEF,函數(shù)就返回一個指向source中C字符的指針。參數(shù)所指向的字符串是絕不會被修改的。
                  a.你不應(yīng)該使用任何用于操縱字符串的庫函數(shù)(如strcpy,strcmp,index等)。
                  b.函數(shù)中的任何地方都不應(yīng)該使用下標引用
            代碼:
            /**//************************************************************************ 
            *   文件名:CharFind.c 
            *   文件描述:得到字符串S1中第一個且是字符串S2中的位置指針的算法 
            *   創(chuàng)建人: Luyuan, 2008年6月3日 
            *   版本號:1.0 
            *   修改記錄: 

            ***********************************************************************
            */
             
            #include 
            <stdlib.h>
            #include 
            <stdio.h>

            #define TRUE 1
            #define FALSE 0

            /********方法聲明********************************************************/ 
            char *find_char(char const *source, char const *chars);
            char *find_char2(char const *source, char const *chars);
            char * my_strpbrk(const char *s1 ,const char *s2);
            /***********************************************************************/
            /*主函數(shù)*/
            int main()
            {
                
            char *str1 = "xxammana_babi";
                
            char *str2 = "babi";
                
            char *p;

                p 
            = find_char2(str1, str2);

                printf(
            "The first  char of found is %c\n"*p);    

                
            if( (p = my_strpbrk(str1,str2)) == NULL)
                   printf(
            "No same character!\n");
                
            else
                   printf(
            "%c\n",*p);

                str1 
            = "abc";
                str2 
            = "def";

                
            if( (p = my_strpbrk(str1,str2)) == NULL)
                   printf(
            "No same character!\n");
                
            else
                   printf(
            "%c\n",*p);

                system(
            "pause");
                
            return 0;
            }


            /***********************************************************************
            * 函 數(shù) 名:find_char 
            * 參    數(shù): 
            *        char const *source [IN] : 進行查找的源字符串 
                     char const *chars [IN]: 要查找的目標字符串
            * 功能描述: 
            *        得到source中第一個且是chars中字符的位置指針。用下標
            * 返 回 值:查找成功-找到的字符指針,失敗NULL 
            * 拋出異常: 
            * 作    者:Luyuan 2008-06-03
            ***********************************************************************
            */
             
            char *find_char(char const *source, char const *chars)
            {
                
            int iIndex=0, j=0;
                
            const char *pS = NULL;
                
            int iFound = FALSE;

                
            if(source == NULL || chars == NULL)
                
            {
                    
            return NULL;
                }


                
            for(; source[iIndex] != NULL; ++iIndex)/*遍歷源字符串字符*/
                
            {
                    j 
            = 0;
                    
            for(; chars[j] != NULL; ++j)/*遍歷目標字符串字符*/
                    
            {
                        
            if(source[iIndex] == chars[j])
                        
            {
                            iFound 
            = TRUE;
                            
            break;
                        }
                        
                    }


                    
            if(iFound)/*若iFound值為TRUE的話表示字符已經(jīng)找到*/
                        
            break;
                }


                pS 
            = &source[iIndex];
                
            return pS;
            }

            /***********************************************************************
            * 函 數(shù) 名:find_char 
            * 參    數(shù): 
            *        char const *source [IN] : 進行查找的源字符串 
                     char const *chars [IN]: 要查找的目標字符串
            * 功能描述: 
            *        得到source中第一個且是chars中字符的位置指針。沒有用下標
            * 返 回 值:查找成功-找到的字符指針,失敗NULL 
            * 拋出異常: 
            * 作    者:Luyuan 2008-06-03
            ***********************************************************************
            */

            char *find_char2(char const *source, char const *chars)
            {
                
            int iIndex=0, j=0;
                
            const char *pS = NULL;
                
            int iFound = FALSE;

                
            if(source == NULL || chars == NULL)
                
            {
                    
            return NULL;
                }


                
            for(; *(source+iIndex) != NULL; ++iIndex)/*遍歷源字符串字符*/
                
            {
                    j 
            = 0;
                    
            for(; *(chars+j) != NULL; ++j)/*遍歷目標字符串字符*/
                    
            {
                        
            if(*(source +iIndex) == *(chars+j))
                        
            {
                            iFound 
            = TRUE;
                            
            break;
                        }
                        
                    }


                    
            if(iFound)/*若iFound值為TRUE的話表示字符已經(jīng)找到*/
                        
            break;
                }

                
            if(!iFound)
                
            {
                    
            return FALSE;
                }

                pS 
            = (source+iIndex);
                
            return pS;
            }

            /***********************************************************************
            * 函 數(shù) 名:my_strpbrk 
            * 參    數(shù): 
            *        char const *s1 [IN] : 進行查找的源字符串 
                     char const *s2 [IN]: 要查找的目標字符串
            * 功能描述: 
            *        得到s1中第一個且是s2中字符的位置指針。
            * 返 回 值:查找成功-找到的字符指針,失敗NULL 
            * 拋出異常: 
            * 作    者:來源C標準庫函數(shù)
            ***********************************************************************
            */

            char * my_strpbrk(const char *s1 ,const char *s2)
            {
               
            const char *= s2;
               
            if (!*s1)
                  
            return (char *) NULL;

               
            while (*s1)/*遍歷源字符串字符*/
               
            {
                  
            for (c = s2; *c; c++)/*遍歷目標字符串字符*/
                  
            {
                    
            if (*s1 == *c)
                       
            break;
                  }

                  
            if (*c)/*若當(dāng)前字符不為字符串結(jié)尾字符“\n”之后,為NULL,則表示已經(jīng)找到,條件為真*/
                    
            break;
                  s1
            ++;
               }


               
            if (*== '\0')
                  s1 
            = NULL;

               
            return (char *) s1;
            }

            /********************************FILE END*********************************/
            注意:
                     1.在上面的代碼中,注意有的地方聲明為const char *,而有些則聲明為char const *,因為無 const * 的定義,故這兩種定義沒有區(qū)別,都表示指向常量字符串的指針,即指針的指向的內(nèi)容不可變,而指針本身可以改變。其次要注意與char * const 的區(qū)別,char * const 表示指向字符串的常量指針,即指針本身不可改變,而指針指向的內(nèi)容可以改變。
                     2.我寫的代碼與庫函數(shù)有多處區(qū)別。首先我單獨定義了變量iFound來標識是否找到了匹配的字符,從而方便外層循環(huán)跳出。但由于做判斷并跳出的代碼再內(nèi)層循環(huán)之后,而這時相應(yīng)的指針已經(jīng)指向目標字符串的末尾之后,是否找到匹配字符從指針本身即可做出判斷,額外設(shè)置變量標識,純屬多余。
            国产高潮国产高潮久久久91| 久久国产成人精品国产成人亚洲| 思思久久99热只有频精品66| 久久99精品国产麻豆蜜芽| 中文字幕无码久久久| 久久国产精品99精品国产| 亚洲国产精品久久久久久| 亚洲欧美精品一区久久中文字幕 | A级毛片无码久久精品免费| 俺来也俺去啦久久综合网| 久久综合色区| 国产精品美女久久久久网| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久久WWW成人免费精品| 久久天天躁狠狠躁夜夜不卡| 国产婷婷成人久久Av免费高清| 久久久久久国产a免费观看不卡| 亚洲精品蜜桃久久久久久| 久久久久综合中文字幕| 久久久久女人精品毛片| 欧美日韩精品久久久久| 亚洲伊人久久大香线蕉苏妲己| 一本一道久久综合狠狠老| 热综合一本伊人久久精品| 久久亚洲国产午夜精品理论片| 亚洲综合伊人久久综合| 亚洲精品午夜国产va久久| 国产99久久久久久免费看| av无码久久久久不卡免费网站 | 久久只有这精品99| 欧美午夜A∨大片久久 | 久久最新精品国产| 久久大香香蕉国产| 久久超碰97人人做人人爱| 激情伊人五月天久久综合| 久久精品无码一区二区WWW| 久久香综合精品久久伊人| 99久久这里只精品国产免费| 麻豆av久久av盛宴av| 亚洲狠狠婷婷综合久久蜜芽| 亚洲国产精品无码久久久蜜芽|