筆試題目「翻轉字串」的實現

2021-09-07 21:19:24 字數 2019 閱讀 5153

//寫乙個函式,將字串翻轉,翻轉方式如下:「i am a student」反轉成「student a am i」,不借助任何庫函式。

據說這題在筆試或者面試當中,出現的頻率非常高。剛好在書上也看到這題,又在看到這題出現了(「發職位經典面試題」)。

作者也提示了,方法是先反轉整個字串,然後再反轉字串。譬如先將「i am a student」反轉為「tneduts a ma i」,然後再對每個字串(空格分割)反轉一次。思想就那麼簡單吧。實現起來的話,我就有點凌亂了。c++沒學好。傷不起。

1 #include 2

3void

main()

418 q--;

19while(p<=q)

20//

反轉整個字串

2728

printf(str);

29 printf("\n"

);30

31 q=str;//

指標指向開始位置

32char *s,*t;

33 s=t=str;

34while(*q!='\0'

)35//反轉區域性字串

4748 s=q+1

;49 t=q;50}

52 q++;

53 t++;54}

5556

printf(str);

57 printf("\n"

);58 }

執行之後,我發現是成功的。

但是怎麼想都感覺有點問題,把「i am a student」換成「you are a student」果然有問題。

沒有處理最後乙個字串的緣故。因為我是按照

if(*q=='

')

來處理字串的,而字串最後乙個的結尾沒有空格了,而是以'\0'結尾的。

最後乙個字串的處理我是這樣做的。

if(*q=='

'||*(q+1)=='\0'

)

q--;

while(p<=q)

//反轉整個字串

printf(str);

printf("\n

");char *s;

q=p=s=str;//

指標指向開始位置

while(*q!='\0'

)

//反轉區域性字串

s=q+1

; p=q;

}q++;

p++;

}printf(str);

printf("\n

");}

另外給乙個我在《程式設計師面試寶典》看到的**,不過這個主要採用陣列處理,而且使用了庫函式(strlen()),但是思想差不多吧。可以參考參考。

#include #include 

int main(void

) printf(

"string=%s\n

",str);

int i=0

;

//第二步進行部分反轉,如果不是空格則開始反轉單詞

while

(str[i])

i=i-1

; end=i;

}while(end>begin)

i++;

}printf(

"string=%s\n

",str);

return0;

}

既然看到了,就應該要思考吧。僅提公升..

參考《程式設計師面試寶典(第二版)》

開發職位經典面試題

筆試題目「翻轉字串」的實現

寫乙個函式,將字串翻轉,翻轉方式如下 i am a student 反轉成 student a am i 不借助任何庫函式。我自己寫了個實現 將字串翻轉 翻轉方式如下 i am a student 反轉成 student a am i 方法 先反轉整個字串,然後再反轉字串。譬如先將 i am a s...

筆試題 字串翻轉 python

將一句話的單詞進行倒置,標點不倒置。比如 i like beijing.經過函式後變為 beijing.like i 輸入描述 每個測試輸入包含1個測試用例 i like beijing.輸入用例長度不超過100 輸出描述 依次輸出倒置之後的字串,以空格分割 輸入例子 i like beijing....

字串筆試題

1 輸入乙個整數的字串,把該字串轉換成整數並輸出。例如輸入字串 345 則輸出整數345 思路 依次掃瞄字串,每掃到乙個字元,把之前的得到的數字乘以10再加上當前字元表示的數字。注意 還可能包括 或 表示整數的正負。需要特殊處理 考慮非法輸入 1 判斷指標是否為空 2 輸入的字串可能不是數字的字元,...