有一个字符数组的内容为: “student a am i”, 请你将数组的内容改为"i am a student"
要求: 不能使用库函数 .
student a am i
i ma a tneduts
i am a student
代码如下:
#include<stdio.h>
void reserve_str(char* left, char* right)
{
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
++left;
--right;
}
}
int mystrlen(char* str)
{
int count = 0;
while (*str++)
{
count++;
}
return count;
}
void reserve(char* str)
{
int len = mystrlen(str);
//先将字符串逆置
reserve_str(str, str + len - 1); //整体逆置,结果为: i ma a tneduts
while (*str)
{
char* cur = str;
//找单词末尾
while (*cur != ' ' && *cur != '\0')
{
++cur;//找单词的末尾
}
//找到了单词末尾,将每个单词进行逆置,因为cur现在在空格的位置,所以传入cur-1
reserve_str(str, cur - 1);
str = cur;
if (*str == ' ')
{
//当str在空格处,空格不参与交换,所以让它朝后走一下
++str;
}
}
}
int main()
{
char arr[] = "student a am i";
reserve(arr);
printf("%s\n", arr);
}