• <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综合一区二区| 东京热TOKYO综合久久精品| 国产亚洲精久久久久久无码77777| 久久亚洲2019中文字幕| 久久99久久成人免费播放| 一本大道加勒比久久综合| 热久久这里只有精品| 精品国产热久久久福利| 久久国产精品波多野结衣AV| 精品国产婷婷久久久| 久久男人中文字幕资源站| 伊人久久大香线蕉AV一区二区| 久久无码精品一区二区三区| 性做久久久久久免费观看| 久久这里的只有是精品23| 国产69精品久久久久9999APGF| 亚洲αv久久久噜噜噜噜噜| 97久久精品人妻人人搡人人玩| 999久久久免费精品国产| 久久青草国产手机看片福利盒子| 一级做a爰片久久毛片16| 久久久久国产一区二区| 亚洲国产欧美国产综合久久| 国产精品天天影视久久综合网| 精品一久久香蕉国产线看播放| 一本久久免费视频| 精品一区二区久久| 亚洲婷婷国产精品电影人久久| 亚洲欧洲日产国码无码久久99| 久久精品国产亚洲综合色| 久久精品国产亚洲5555| 久久人与动人物a级毛片| 国产精品久久久久久久久| 国产免费福利体检区久久| 区久久AAA片69亚洲| 久久亚洲精品视频| 亚洲精品国产字幕久久不卡| 久久电影网| 国产成人久久AV免费| 国产精品久久久久久久久软件|