• <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>

            旅途

            如果想飛得高,就該把地平線忘掉

            面試系列5--以單詞為最小單位翻轉字符串(改進版)

            原題:

            ? 以單詞為最小單位翻轉字符串
            ? Write the function String reverseStringWordByWord(String input) that reverses
            ? a string word by word.? For instance,
            ? reverseStringWordByWord("The house is blue") --> "blue is house The"
            ? reverseStringWordByWord("Zed is dead") --> "dead is Zed"
            ? reverseStringWordByWord("All-in-one") --> "All-in-one"

            面試系列4種的實現,比較費空間,因為多申請了一段空間來保存結果。

            在看了其他高手的實現后,發現可以不用申請空間,并且循環的次數更少,也可以實現相同的效果。

            大體思路是:

            原字符串: The house is blue

            先翻轉整個字符串-> eulb si esuoh ehT

            再翻轉單個單詞。

            代碼:

            /********************************************************************
            ??? created:??? 2006/06/16
            ??? filename:?? C:\Documents and Settings\Administrator\桌面\flwo\reverse2.c
            ??? file path:? C:\Documents and Settings\Administrator\桌面\flwo
            ??? file base:? reverse
            ??? file ext:?? c
            ??? author:???? A.TNG
            ??? version:??? 0.0.1
            ???
            ??? purpose:??? 以單詞為最小單位翻轉字符串-2 優化版
            ??????????????? Write the function String reverseStringWordByWord(String input)
            ??????????????? that reverses a string word by word.? For instance,
            ??????????????? reverseStringWordByWord("The house is blue") --> "blue is house The"
            ??????????????? reverseStringWordByWord("Zed is dead") --> "dead is Zed"
            ??????????????? reverseStringWordByWord("All-in-one") --> "All-in-one"
            ??????????????? 參考其他高手的思路:
            ??????????????? 先翻轉整個字符串-> eulb si esuoh ehT
            ??????????????? 再翻轉單個單詞。

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

            #define REVERSE_WORD(p1, p2) while (p1 <= p2) \
            ??? { \
            ??????? char ch; \
            ??????? ch = *p1; *p1 = *p2; *p2 = ch; \
            ??????? p1++; p2--; \
            ??? }

            /*
            ?*? name: reverse_src_word_by_word
            ?*? params:
            ?*??? des?????????? [out]?????????? 輸出字符串, des 指向實現申請的空間
            ?*??? src?????????? [in]??????????? 輸入字符串,需要處理的字符串
            ?*? return:
            ?*??? 處理完成后的 des 指針
            ?*? notes:
            ?*??? 以單詞為最下單位翻轉字符串
            ?*??? 優化: 先翻轉整個字符串,再翻轉單個單詞
            ?*?
            ?*? author: A.TNG 2006/06/16 10:37
            ?*/
            char * reverse_str_word_by_word2(char *src)
            {
            ??? char?? *p1, *p2;
            ??? int???? n_src_len;

            ??? if (NULL == src)
            ??????? return NULL;

            ??? /* 先把整個字符串翻轉一次 */
            ??? n_src_len = strlen(src);
            ??? p1 = src; p2 = src + n_src_len - 1;
            ??? REVERSE_WORD(p1, p2);
            #if 0
            ??? while (p1 <= p2)
            ??? {
            ??????? /* 交換頭字符和尾字符 */
            ??????? char ch;
            ??????? ch = *p1; *p1 = *p2; *p2 = ch;
            ??????? p1++; p2--;
            ??? }
            #endif

            ??? /* 再翻轉單個單詞 */
            ??? p1 = src; p2 = p1;
            ??? while ('\0' != *p2)
            ??? {
            ??????? if (' ' == *p2)
            ??????? {
            ??????????? char?? *p;

            ??????????? p = p2 - 1;
            ??????????? REVERSE_WORD(p1, p);
            #if 0??????????
            ??????????? while (p1 <= p)
            ??????????? {
            ??????????????? char ch;
            ??????????????? ch = *p1; *p1 = *p; *p = ch;
            ??????????????? p1++; p--;
            ??????????? }
            #endif
            ??????????? p2++;
            ??????????? p1 = p2;
            ??????? }
            ??????? else
            ??????? {
            ??????????? p2++;
            ??????? }
            ??? }

            ??? /* 翻轉最后一個單詞 */
            ??? p2--;
            ??? REVERSE_WORD(p1, p2);
            #if 0
            ??? while (p1 <= p2)
            ??? {
            ??????? char ch;
            ??????? ch = *p1; *p1 = *p2; *p2 = ch;
            ??????? p1++; p2--;
            ??? }
            #endif

            ??? return src;
            }

            /*
            ?*? name: main
            ?*? params:
            ?*??? none
            ?*? return:
            ?*??? none
            ?*? notes:
            ?*??? none
            ?*?
            ?*? author: A.TNG 2006/06/16 10:37
            ?*/
            int main()
            {
            ??? // char src[] = " All-in-one ";
            ??? // char src[] = "The house is blue";
            ??? char??? src[]?? = "Zed is dead";

            ??? (void) reverse_str_word_by_word2(src);
            ??? printf("*****%s*****\n", src);

            ??? system("PAUSE");
            }

            posted on 2007-09-05 01:16 旅途 閱讀(302) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            99久久伊人精品综合观看| 亚洲精品NV久久久久久久久久 | 亚洲伊人久久成综合人影院| 久久人人超碰精品CAOPOREN| 国产99久久久国产精品小说| 久久综合综合久久综合| 亚洲国产天堂久久综合网站| 久久成人小视频| 91久久精品91久久性色| 香蕉99久久国产综合精品宅男自| 无码国内精品久久综合88| 久久综合久久久| 午夜天堂精品久久久久| 久久精品无码av| 国产精品久久自在自线观看| 久久人人爽人人人人爽AV | 国内精品久久久久久久97牛牛| 九九热久久免费视频| 少妇高潮惨叫久久久久久| 亚洲国产天堂久久综合| 国产精品一区二区久久| 久久精品中文无码资源站| 久久久久久久女国产乱让韩| 久久精品亚洲乱码伦伦中文| 久久综合综合久久狠狠狠97色88| 精产国品久久一二三产区区别 | 久久免费国产精品一区二区| 无码精品久久久久久人妻中字| 久久综合伊人77777| 国产成人久久久精品二区三区| 99久久免费国产精品热| 久久久久久久人妻无码中文字幕爆| 亚洲国产精品嫩草影院久久| 久久精品成人一区二区三区| 久久se这里只有精品| 99久久综合狠狠综合久久| 国产亚洲成人久久| 欧美日韩精品久久久免费观看| 久久久久这里只有精品| 亚洲精品无码专区久久同性男| 开心久久婷婷综合中文字幕|