• <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>
            隨筆 - 89  文章 - 118  trackbacks - 0
            <2013年8月>
            28293031123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            留言簿(16)

            隨筆分類(56)

            隨筆檔案(89)

            文章分類

            推薦博客

            搜索

            •  

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            將字符串里詞順序倒置,如"Times New Roman"變?yōu)?Roman New Times"。以空格為分隔符。

            解決方案為:先將整個(gè)字串倒置,然后依次把倒置后串中的每一個(gè)單詞倒置。

            這個(gè)問題解答的思路很簡單,但是要考慮到很多種的情況,比如字符串的頭、尾有多余的空格怎么辦,如果字符串中只有空格,還有字符串中間可能會(huì)有兩個(gè)以上并列的空格。

            程序如下:

             1 void ReverseStr(char *pStr, int len)
             2 {
             3     assert(pStr);
             4     
             5     char ch;
             6     for (int i = 0; i < len/2 ; i++)
             7     {
             8         ch = pStr[i];
             9         pStr[i] = pStr[len-1-i];
            10         pStr[len-1-i] = ch;
            11     }
            12 }
            13 
            14 void ReverseStrWord(char *pStr, int len)
            15 {
            16     assert(pStr);
            17 
            18     if (len <= 1)
            19         return;
            20 
            21     // 倒置整個(gè)字符串
            22     ReverseStr(pStr, len);
            23 
            24     // 處理頭多余的空格
            25     int i = 0;
            26     if (pStr[0== ' ')            while (pStr[i] == ' ' && i < len)        i++;
            27 
            28     // 整個(gè)串都是空格
            29     if (i == len)
            30         return;
            31 
            32     // 處理尾多余的空格
            33     if (pStr[len - 1== ' ')    while (pStr[len - 1== ' ' && len - 1 > 0)    len--;
            34 
            35     for (int start = i; i < len; i++)
            36     {
            37         // 最后的end要+1
            38         if (i == len-1)
            39         {
            40             ReverseStr(pStr+start, i-start+1);
            41             break;
            42         }
            43 
            44         // 倒置一個(gè)單詞
            45         if (pStr[i] == ' ')
            46         {
            47             ReverseStr(pStr+start, i-start);
            48             start = i+1;
            49             // 處理內(nèi)部并列的空格
            50             if (pStr[start] == ' ')
            51             {
            52                 while(pStr[start] == ' ') {i++;start++;};
            53             }
            54         }
            55     }
            56 }
            57 

             

            說實(shí)話,如果是突然面對(duì)這樣一個(gè)問題,要在一張紙上寫下比較完整的程序是不大可能。能邊調(diào)試邊寫程序有的時(shí)候也是一件幸事。
            中秋節(jié)要到了,我要換工作了,告別已經(jīng)工作兩年多熟悉的環(huán)境,感覺這兩年沒有太大的進(jìn)步,奮斗吧,趁著自己還年輕!

            posted on 2008-09-12 20:42 胡滿超 閱讀(2225) 評(píng)論(5)  編輯 收藏 引用

            FeedBack:
            # re: 將字符串里詞順序倒置 2008-09-13 13:39 獨(dú)履_天涯
            樓主現(xiàn)在做什么工作啊,不知道要換什么工作啊?  回復(fù)  更多評(píng)論
              
            # re: 將字符串里詞順序倒置 2008-09-14 22:00 胡滿超
            現(xiàn)在在一家公司做程序員,換到另外一家還做程序員,呵呵。  回復(fù)  更多評(píng)論
              
            # re: 將字符串里詞順序倒置 2009-01-09 15:36 yych13
            用JAVA解決可能簡單一些:
            public void reverseString(String str, String regx) {

            String[] split = str.split(regx);
            int last = split.length - 1;
            StringBuffer result = new StringBuffer();
            for (int i = last; i > 0; i--) {
            result.append(split[i]);
            result.append(regx);
            }
            result.append(split[0]);
            System.out.println(result.toString());
            }  回復(fù)  更多評(píng)論
              
            # re: 將字符串里詞順序倒置 2009-02-18 17:14 qingfly
            根據(jù)這個(gè)思路我用PHP使用
            <?php
            //字符串反置
            function ReverseStr (&$str, $len){
            $i = 0;
            for($i; $i < $len; $i++,$len--){
            $ch = $str[$i];
            $str[$i] = $str[$len];
            $str[$len] = $ch;
            }
            }

            function ReverseStrWord ($word, $len){

            if($len == 1) return ;

            //倒置全部字符串
            ReverseStr(&$word, $len);

            //去除字符串前的空格
            $i = 0;
            if($word[0] == ' ') {
            while ($word[$i] == ' ' && $i < $len) {
            $i++;}
            }

            //全是空格返回
            if($i == $len) return ;

            //去除尾部空格
            if($word[$len] == ' ') {
            while ($word[$len] == ' ' && $len > $i) {
            $len--;}
            }

            for($start = $i; $i <= $len; $i++ ){

            $str .= $word[$i];

            if($i == $len){
            ReverseStr($str, $i-$start+1);
            $R_string .= $str;
            break;
            }

            if($word[$i] == ' '){
            ReverseStr($str, $i-$start);
            $R_string .= $str;
            $str = '';
            $start = $i+1;
            if($word[$start] == ' '){
            while ($word[$start] == ' ') {
            $start++;
            $i++;
            }
            }
            }
            }
            return $R_string;
            }


            $str = "Times New Roman";
            $len = strlen($str);
            $pstr = ReverseStrWord($str, $len);

            ?>
              回復(fù)  更多評(píng)論
              
            # re: 將字符串里詞順序倒置 2012-03-19 15:50 張更偉
            void inverse(char *p1, char *p2)
            {
            if (0 == p1 || 0 == p2) return;
            while (p1 < p2)
            {
            char c = *p1;
            *p1++ = *p2;
            *p2-- = c;
            }
            }

            char* inverse(char * const s)
            {
            if (0 == s) return s;
            const int n = strlen(s);
            inverse(s, s + n -1);

            char *p1 = s - 1;
            char *p2 = p1;

            while(++p2 < s + n)
            {
            if (*p2 == ' ')
            {
            inverse(p1 + 1, p2 - 1);
            p1 = p2;
            }
            }

            inverse(p1 + 1, p2 - 1);
            return s;
            }
              回復(fù)  更多評(píng)論
              

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            无码人妻少妇久久中文字幕| 亚洲国产精品无码久久| 久久成人精品视频| 日本久久久精品中文字幕| 狠狠精品久久久无码中文字幕| 久久精品国产福利国产琪琪| 久久国内免费视频| 人妻精品久久久久中文字幕一冢本| 久久ww精品w免费人成| 日本三级久久网| 亚洲国产小视频精品久久久三级 | 欧美一区二区精品久久| 国内精品久久久久久麻豆| 2021国内久久精品| 精品无码久久久久国产| 久久精品国产99久久香蕉| 日日噜噜夜夜狠狠久久丁香五月 | 91精品国产9l久久久久| 久久香蕉一级毛片| 99久久做夜夜爱天天做精品| 精品精品国产自在久久高清| 色欲综合久久躁天天躁| 国产精品久久久久久影院 | .精品久久久麻豆国产精品| 久久国产视频99电影| 久久久久亚洲AV无码专区体验 | 无码久久精品国产亚洲Av影片 | 亚洲国产精品无码久久| 精品久久久久久无码中文野结衣| 伊人久久大香线焦AV综合影院| 久久综合狠狠综合久久激情 | 久久99久久成人免费播放| 欧洲人妻丰满av无码久久不卡| 久久人人爽人人澡人人高潮AV| 精品综合久久久久久888蜜芽| 无码任你躁久久久久久老妇App| 香蕉久久夜色精品国产小说| 久久九九精品99国产精品| 伊人久久一区二区三区无码| 国产精品99久久不卡| 久久久久久久人妻无码中文字幕爆|