反转字符串(完整代码)

题目描述:

有一个字符数组的内容为:“student a am i”, 请你将数组的内容改为"i am a student".
要求: 不能使用库函数,只能开辟有限个空间

解题思路:

先对字符串内容整体逆转一次:i ma a tneduts
再将每一个子串内容逆转:i am a student

完整代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <stdio.h>
int strlen(char*str)     // 求字符串长度
{
	int count = 0;
	while (*str++)
	{
		count++;
	}
	return count;
}
void reverse(char*star, char*end)    // 实现字符串逆转的函数
{
	char temp = 0;
	while (star < end)
	{
		temp = *star;
		*star = *end;
		*end = temp;
		star++;
		end--;
	}
}

void reverse_str(char*str)
{
	char *cur = str;
	char*left = str;
	char* right = str + strlen(str)-1;
	reverse(left, right);     // 逆转整个字符串
	while (*cur)
	{
		//寻找子串的起点和尾点
		char*star = cur;
		while ((*cur != ' ') && (*cur != '\0'))
		{
			cur++;
		}		
		reverse(star, cur - 1);    //逆转每一个子串
		if (*cur == ' ')  		//找到下一个子串的起点
		{
			cur++;
		}
	}	
}
	
int main()
{
	char a[] = { "student a am i" };
	reverse_str(a);
	printf("%s\n", a);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ly_6699/article/details/83930924