例如:
有一个字符数组的内容为:“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;
}