1. 程式人生 > >【C語言】字串逆轉

【C語言】字串逆轉

例如: 有一個字元陣列的內容為:“student a am i”, 請你將陣列的內容改為"i am a student". (要求:不能使用庫函式。 ) 分析: 這裡需要兩次逆轉,先將字串整體逆轉,再將以空格分割的子串逆轉 程式碼部分:

先用my_strlen函式計算字串大小:

int my_strlen(char * str)
{
	int count = 0;
	while(*str)
	{
		count++;
		str++;
	}
	return count;
}

逆轉從 start 到 end 之間的字串:

void reverse_str(char* start,char * end)
{
	while(start < end)
	{
		//儲存頭的內容
	char temp = *start;
	//把頭的內容置換為尾的內容
	*start = *end;
	//把尾的內容置換為頭的內容
	*end = temp;
	//頭向後移動,尾向後移動
	start++;
	end--;
	}
}

子串逆轉:

void reverse(char* str)
{
	char* start = str;
	char* end = str + my_strlen(str) - 1;
	//字串的起始指標
	char* cur_start = str;
	//整體逆轉一遍
	reverse_str(start,end);

	//區域性子串逆轉
	while(*cur_start)
	{
		//區域性起點
		char* start = cur_start;
		//尋找子串的尾點
		while((*cur_start != ' ') && (*cur_start != '\0'))
		{
			cur_start++;
		}
		//逆轉子串
		reverse_str(start,cur_start - 1);
		if(*cur_start == ' ')
		{
			cur_start++;
		}
	}
}
int main()
{
	char str[100];
	gets(str);
	reverse(str);
	printf("%s\n",str);
	system("pause");
	return 0;
}


在這裡插入圖片描述

在這裡插入圖片描述