<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          之前字符串反轉(zhuǎn)的題目

          共 3644字,需瀏覽 8分鐘

           ·

          2022-06-28 11:47

          之前發(fā)的字符串反轉(zhuǎn)的題目

          這道字符串反轉(zhuǎn)的題目,你能想到更好的方法嗎?

          有很多人評(píng)論了,有的人還寫了自己的解題思路,還有人寫了自己的代碼


          還有其中呼聲很高的壓棧解法


          我相信很多人在筆試的時(shí)候一定會(huì)遇到這類題目,給你一個(gè)字符串,讓你找到一些規(guī)律,或者是找到某個(gè)字符串,或者是字符大小寫轉(zhuǎn)換等等。

          我們先看一下,如果我們用棧來(lái)完成這個(gè)代碼要怎么寫?

          我上面貼的那個(gè)答案其實(shí)就是用到了棧的思想,隊(duì)列的先進(jìn)先出,棧的話就是先進(jìn)后出。

          棧,C語(yǔ)言實(shí)現(xiàn)

          所以上面的代碼


          就是以棧形式,最后的位置先出來(lái)。

          如果我那份代碼要用棧的形式呢?我寫了一個(gè)粗糙的版本

          #include "stdio.h"
          #include "string.h"
          #include "stdlib.h"

          char input[] = {"the sky is blue"};

          //題目:

          //input  the sky is blue
          //output blue is sky the

          void reverseWords(char* s, size_t n) {
           char *stack = (char*)malloc(n);
           memcpy(stack, s, n);
           for (int i=0; i<n; i++) {
            *(s + i) = *(stack + n -i -1); 
           }
           if (stack) {
            free(stack);
            stack = NULL;
           }
          }

          //eulb si yks eht

          void reverseWords_by_space(char* s, int n) {

           int i = 0;
           int len = 0;
           for (i=0; i<n; i++) {
            if (s[i] == ' ') {
             reverseWords(s+i-len, len);
             len = 0;
            } else if (s[i] == '\0') {
             reverseWords(s+i-len, len);
             len = 0;   
            }else {
             ++len;
            }
           }

          }

          int main(void) {

           printf("%s\n", input);
           reverseWords(input,strlen(input));
           reverseWords_by_space(input,sizeof(input));
           printf("%s\n", input);
           // 寫完了,大家有不明白的評(píng)論下
           return 0;

          }

          但是我覺得不是很好,因?yàn)槔锩嬗玫搅?strong>內(nèi)存申請(qǐng),做嵌入式的應(yīng)該知道,內(nèi)存對(duì)于我們來(lái)說(shuō)是稀缺資源。

          所以我還是覺得上面那個(gè)同學(xué)的寫法非常給力

          也有人回復(fù)說(shuō)用異或來(lái)實(shí)現(xiàn)兩個(gè)變量的交換,變量交換的方法很多,但是面試的時(shí)候有時(shí)候會(huì)記不住,所以我們會(huì)寫最簡(jiǎn)單的方法,不過(guò)有些常見的方法大家可以試試。

          #include "stdio.h"

          void swap4(int *a,int *b) {
           *a = (*a + *b) - (*b = *a);
          }

          void swap3(int *a,int *b) {
           *a = (*a ^ *b) ^ (*b = *a);
          }

          void swap2(int *a,int *b) {
           *a = *a + *b;
           *b = *a - *b;
           *a = *a - *b;
          }

          void swap1(int *a,int *b) {
           *a = *a^*b;
           *b = *a^*b;
           *a = *a^*b;
          }

          int main(void) {
           int a = 3,b = 4;
           printf("a=%d,b=%d\n",a,b);
           swap1(&a,&b);
           printf("a=%d,b=%d\n",a,b);
           swap2(&a,&b);
           printf("a=%d,b=%d\n",a,b);
           swap3(&a,&b);
           printf("a=%d,b=%d\n",a,b);
           swap4(&a,&b);
           printf("a=%d,b=%d\n",a,b);
           return 0;

          }
          輸出


          晚上想再更新下代碼
          #include "stdio.h"
          #include "string.h"
          #include "stdlib.h"
          char input[] = {"the sky is blue cris 1212321 apple"};

          //題目:

          //input  the sky is blue
          //output blue is sky the

          void reverseWords(char* s, size_t n) {
           *(s+n-1) = '\0';
           printf("%s ",s);
          }

          int main(void) {
           int size = sizeof(input);
           printf("%s\n",input);
           for (int i=0,n=0; i<=size; i++,n++) {
            if (*(input+size-i-1) == ' ' || i == size){
             reverseWords(input+size-i, n);
             n = 0;
            }
           }
           return 0;
          }

          大家如果還有更好的方法,歡迎繼續(xù)留言。
          如果有看到和這道題目變種的筆試題,也歡迎留言。



          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕免费 | 骚逼网址 | 亚洲综合五月天婷婷丁香 | 波多野吉衣AⅤ无码一区小说 | 欧美日批 |