void reverse(char*start, char*end)
{
while (start < end)
{
/*char tmp = *start;
*start = *end;
*end = tmp;
start++;
end--;*/
*start^=*end;//两种方法进行两元素交换位置
*end ^= *start;
*start ^= *end;
start++;
end--;
}
}
void str_reverse(char *str)
{
//先局部逆置,以空格判断结束
assert(str);
char *p = str;//指向字符串的头部
char *q = p;//指向同一个位置
while (*p)//判断是否为空
{
if (isspace(*p))//isspace如果遇到空格就返回true
{
reverse(q,p-1);//进行局部字符串逆置
p++;//跳过空格
q = p;//让p和q回到下一个字符串的同一个位置
}
else
{
p++;
}
}
reverse(q, p - 1);
reverse(str, p - 1);//进行整体逆置,p-1去掉最后一位的空格
}
int main()
{
char str[] = "student a am i";
str_reverse(str);
printf("ret: %s\n",str);
system("pause");
return 0;
}
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
最新推荐文章于 2022-04-04 18:59:56 发布