题目描述:
有一个字符数组的内容为:“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;
}