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

            亚洲精品综合久久| 国产精品99久久久久久宅男| 久久久噜噜噜久久中文字幕色伊伊| 久久久久久久久久久免费精品| 亚洲国产精品成人久久蜜臀| 亚洲AV无码成人网站久久精品大| 久久国产精品久久久| 久久影院久久香蕉国产线看观看| 色天使久久综合网天天| 精品国产福利久久久| 亚洲а∨天堂久久精品9966| 久久精品国产亚洲AV大全| 久久人人爽人人澡人人高潮AV | 久久久午夜精品福利内容| 欧美精品久久久久久久自慰| 国产午夜精品理论片久久| 久久亚洲精精品中文字幕| 久久亚洲高清综合| 国产精品午夜久久| 国产精品久久影院| 久久综合给合久久狠狠狠97色69| 久久久久久国产a免费观看不卡| 精品久久久久中文字幕日本| 99久久国产综合精品女同图片| 久久伊人五月天论坛| 99久久精品国产综合一区| 狠狠狠色丁香婷婷综合久久五月| 77777亚洲午夜久久多人| 香港aa三级久久三级老师2021国产三级精品三级在 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 伊人久久精品影院| 久久成人永久免费播放| 9999国产精品欧美久久久久久 | 亚洲午夜久久久影院| 国产精品久久久久久久久软件| 久久人妻少妇嫩草AV无码蜜桃| 久久精品女人天堂AV麻| 久久精品国产色蜜蜜麻豆| 精品久久久久一区二区三区| 国产成人精品综合久久久| 国产精品久久久99|