字串筆面試題

2022-05-06 17:24:14 字數 2318 閱讀 1891

一、把乙個字串向左/右迴圈移位n個。

如abcdefghi,向左迴圈移位2個,結果為cdefghiab。

這題的出現概率較大,難度較小

1)如果沒有空間的限制,那麼第乙個容易想到的解法是,申請乙個strlen長的字串陣列,把字串複製到這一陣列,然後依照移位前後陣列序號的關係,確定移位後的字串。移位後的數字序號是未移位+n(移位距離),迴圈所以要%strlen

char* rleftfour(char * str,int

n)

2)假設只能申請乙個位元組的額外空間,時間沒有限制。那麼可以對上述演算法改進,每次只迴圈移動一位,總共迴圈n次。迴圈一位的時候,只需要儲存第乙個字元就行,後面的字元依次複製上來,然後把第乙個字元複製到最後。

char* rlefttwo(char * str,int

n) return

str;

}

3)在1)中申請空間可以縮小,只要儲存移位的前n個字元即可,把後面依次複製到前面,最後把儲存的字元複製到最後,

char* rleftone(char * str,int

n)

4)來自於程式設計珠璣,思想是把原始字串分成ab兩部分,a是前i個元素,b是後n-i個元素,首先對a逆序,得到a-1b,然後對b逆序得到a-1b-1,然後對整體逆序得到(a-1b-1)-1=ba。

char* rleftthree(char * str,int

n)char* rleftfour(char * str,int

n)

二、翻轉字串的詞。如「the sky is blue」,翻轉後為「blue is sky the」。要考慮字串開頭和結尾可能有空格。

1)考慮額外的儲存空間,儲存字串的每個單詞於乙個二維陣列中,每行乙個單詞,開頭結尾的空格也儲存,然後從陣列的尾掃瞄到頭輸出即可。

#include using namespace

std;

const int row=20

;const int col=20

;void reverse(char *&

s) for (int i=0;s[i]!='\0';i++

)

}temp[j][k]=' ';//處理最後乙個單詞

k++; temp[j][k]='\0'

; for (int i=j;i>=0;i--

)

} if (k>0

)

}ss[m-1]='\0'

; couts=

ss;}

intmain()

程式是將單詞加空格後存成字串,先分配記憶體後,掃瞄字串,先存,不管是空格還是字元,若第二個是空格或者掃到空格的位置(因為是先存所以單詞後都有空格),就到二維陣列的下一行,直到字串處理完畢。接著從二維陣列的尾行開始,輸出,若存的第乙個是空格,忽略,然後把二維陣列的單詞輸出到字串中,每個單詞間加空格。

c++程式

#include 

#include

using namespace

std;

void reversewords(string &

s) s =

rs;}

intmain()

從後掃瞄,遇到空格則跳過,定義乙個中間變數t來存單詞,到空格時,把存的字串翻轉,成!dlrow,加到rs末,跳過空格,加空格在單詞間。在最後乙個單詞時,i<0.不會加空格。

2)利用字串的翻轉,先對整個字串翻轉,然後對字串中的單詞翻轉。

#include using namespace

std;

void reverse(char *pbegin,char *

pend)

}char* reversesentence(char *

pdata)

else if(*pend == ' ' || *pend == '\0'

)

else

}return

pdata;

}int

main()

翻轉整個字串比較好理解,翻轉詞時,是定義了兩個指標,乙個指向詞頭,開始若是空格,兩指標一起走,當不是空格時,end的指標向前走,走到空格後者尾時,翻轉begin到end間字元,翻轉後,要把begin指標移動到end位置,然後一起走,重複。類似上面,其實這題主要的難點在怎麼處理那些頭和尾的空格。上述**沒有處理空格。想處理空格應該也不難,在翻轉後儲存詞,並加空格

字串高頻面試題。

一 題目 把乙個01 只包含0和1的串 串進行排序。可以交換任意兩個位置,求最少交換的次數。方法 仿造快速排序裡面的partition的過程。最左邊的0和1是沒有意義的,從左到右掃到第乙個1,從右到左掃到第乙個0,然後交換,然後繼續掃下去,就ok啦。include include define ma...

面試題 分割字串

package interview.string public class splitdemo 程式設計 編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如 我abc 4,應該截為 我ab 輸入 我abc漢def 6,應該輸出為 我abc 而不是...

字串相關面試題

面試題目 字串專題 c字串處理函式彙總實現 面試大多會用到 一道面試題 從乙個字串中找出第乙個不重複字元 程式設計師面試題精選100題 36 在字串中刪除特定的字元 一 整數與字串之間的相互轉換 字串處理函式彙總實現 面試大多會用到 轉換字串 插入字元個數 www.firnow.com 常見c語言面...