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

            亚洲精品乱码久久久久久蜜桃图片 | 一本久久a久久精品综合夜夜 | 日批日出水久久亚洲精品tv| 久久久青草青青国产亚洲免观| 三级韩国一区久久二区综合| 久久青青草原精品国产| 久久夜色tv网站| 精品久久久久成人码免费动漫| 久久午夜无码鲁丝片| 久久精品无码一区二区日韩AV| 久久SE精品一区二区| 精品久久久久久久久中文字幕| 久久综合给合综合久久| 久久婷婷五月综合成人D啪| 久久精品人人做人人爽97| 欧美一级久久久久久久大| 久久99国内精品自在现线| 国产精品成人久久久| 青草影院天堂男人久久| 亚洲欧美日韩中文久久 | 久久中文字幕一区二区| 久久精品亚洲AV久久久无码| 精品99久久aaa一级毛片| 91精品国产综合久久精品| 热re99久久6国产精品免费| 色偷偷88欧美精品久久久| 7国产欧美日韩综合天堂中文久久久久 | 97久久精品人人做人人爽| 日韩精品无码久久久久久| 国产成人久久精品一区二区三区 | 国产综合免费精品久久久| 人妻精品久久无码区| 亚洲AV无码1区2区久久| 亚洲中文精品久久久久久不卡| 久久精品青青草原伊人| 99久久精品免费看国产一区二区三区| 中文字幕无码久久人妻| 免费无码国产欧美久久18| 狠狠精品久久久无码中文字幕| 国产aⅴ激情无码久久| 日产精品99久久久久久|