1. 程式人生 > >【C/C++】將字串按空格逆置

【C/C++】將字串按空格逆置

一、題目要求

有一個字元陣列的內容為:"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;
}

執行結果: