c语言中字符串交换位置,c如何实现字符串奇偶位置的互换

fa0b36a856ae8af3cc19bfa8ffa8d10f.png

要求:不申请变量和空间反转字符串,用一个函数实现。VIA笔试题

基本思路:从两头往中间做字符交换。字符串最后一个字符是'\0',表示结束,没有实际意义,可以将它当作中间变量,等处理完成后,再将最后一个字符置'\0'即可

***********************************************************************

void Reverse (char   *s)

{

if(strlen(s) == 1) // 当为一个字符时无需交换或奇数个

return;

if(*(s))   // 0个或偶数个

{

*s   =   *s   +   *(s+strlen(s)-1);

*(s+strlen(s)-1)   =   *s   -   *(s+strlen(s)-1);

*s   =   *s   -   *(s+strlen(s)-1);

// 实现字符串首末字符互换,但加法可能会溢出

*(unsigned   short*)(s+strlen(s)-1)   =   (*(s+strlen(s)-1))<<8;

// 把字符串的最后一个字节往后移了一位,利用了0 =

你可能感兴趣的:(c语言中字符串交换位置)