【C/C++】將字串按空格逆置
阿新 • • 發佈:2019-02-17
一、題目要求
有一個字元陣列的內容為:"student a am i",請你將陣列的內容改為"i am a student".
要求:
不能使用庫函式。只能開闢有限個空間(空間個數和字串的長度無關)。
二、題目分析
初級理解:
乍一看,這是一個字串逆置
可是真的有這麼簡單嗎?
具體分析:
如上圖所示
首先先將整體的字串進行逆置
然後對各個單詞逆置就可以得到我們想要的結果
所以要設定一個函式reverse_all,用來專門進行逆置,引數為逆置的首末地址
然後再用個函式reverse,進行呼叫reverse_all,來解這道題
三、程式碼實現
函式程式碼:
#include<stdio.h> #include<string.h> #include<assert.h> char* reverse_all(char* start , char* end) { assert(start != NULL); assert(end != NULL); char* p = start; char tmp = 0; while(start < end) { tmp = *start; *start = *end; *end = tmp; start++; end--; } return p; } char* reverse(char* str) { assert(str != NULL); char* pstr = str; char* start = str; char* end = str; while(*end != '\0') { while((*end != ' ')&&(*end != '\0')) { end++; } end--; reverse_all(start,end); start = end + 2; end = start; } return pstr; }
main函式程式碼塊:
int main()
{
char str[128] = {"blog to my welcome"};
reverse_all(str,str-1+strlen(str));
printf("%s\n",reverse(str));
return 0;
}