【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;
}


在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章