倒置一串字符串 将一句话的单词进行倒置,标点不倒置。

题目要求:倒置一串字符串 将一句话的单词进行倒置,标点不倒置。

 先整体都逆序,后对每个单词逆序;

或者先对每个单词逆序,再对整体逆序;倒置一串字符串 将一句话的单词进行倒置,标点不倒置。_第1张图片

图解如上:

#include
#include
void reverse(char* left, char* right)
{
	assert(left && right);//断言
	//判断指针的有效性
	while (left < right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
	//整体逆序
}

int main()
{
	char arr[100] = { 0 };
	gets(arr);
	int len = strlen(arr);
	reverse(arr, arr+len-1);//reverse--逆序
	char* cur = arr;
	//再对每个单词逆序
	while (*cur)
	{
		char* start = cur;
		while (*cur != ' '&&*cur !='\0')
			//第一个单词后面是空格,但是最后一个单词后面是\0结束
			//所以两个都需要判断
		{
			cur++;//停下来的那一刻,cur指向的是空格
		}
		reverse(start, cur - 1);//cur -1 指向了这个单词末尾
		//起始位置,末位置
		if (*cur != '\0')
			//在逆序完最后一个单词的时候,cur已经指向了\0,
			//如果这里还不限制cur不能指向\0的话,cur就指向了\0后面了,就会死循环
		{
			cur++;
		}
	}
	printf("%s\n", arr);
}

结果如下:倒置一串字符串 将一句话的单词进行倒置,标点不倒置。_第2张图片

 中间间隔多个空格也能输出倒置一串字符串 将一句话的单词进行倒置,标点不倒置。_第3张图片

你可能感兴趣的:(算法,数据结构)