• <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 旅途 閱讀(295) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            色8久久人人97超碰香蕉987| 久久精品九九亚洲精品天堂| 精品久久久久久久久免费影院| 久久综合视频网站| 久久亚洲美女精品国产精品| 99久久精品九九亚洲精品| 伊人久久大香线蕉亚洲| 国产亚州精品女人久久久久久| 久久www免费人成看片| 精品人妻伦一二三区久久| 久久亚洲欧美日本精品| 色欲久久久天天天综合网| 亚洲伊人久久成综合人影院 | 日韩精品久久无码中文字幕| 国产亚洲成人久久| 久久久久国产精品| 性做久久久久久久久久久| 欧美成a人片免费看久久| 亚洲国产精品无码久久一线| 久久精品国产亚洲AV香蕉| 亚洲国产精品久久久久| 久久国产AVJUST麻豆| 精品无码久久久久久午夜| 久久久久久毛片免费看| 东方aⅴ免费观看久久av| 久久久久四虎国产精品| 国产高清国内精品福利99久久| 伊人久久成人成综合网222| AV狠狠色丁香婷婷综合久久| 久久精品亚洲男人的天堂| 欧洲精品久久久av无码电影| 久久精品国产亚洲一区二区三区| 久久久久99精品成人片直播| 久久精品国产精品国产精品污 | 午夜精品久久久久久久久| 91久久精品国产免费直播| 亚洲AV无码久久| 久久发布国产伦子伦精品| 久久久久免费看成人影片| 女人高潮久久久叫人喷水| 国产精品久久久久久久app|