实现目标方法多,效率高低各不同。
//经典实现,效率高
char* strrev(char* s)
{
/* h指向s的头部 */
char* h = s;
char* t = s;
char ch;
/* t指向s的尾部 */
while(*t++){};
t--; /* 与t++抵消 */
t--; /* 回跳过结束符'\0' */
/* 当h和t未重合时,交换它们所指向的字符 */
while(h < t)
{
ch = *h;
*h++ = *t; /* h向尾部移动 */
*t-- = ch; /* t向头部移动 */
}
return(s);
}
char *strrev(char *str)
{
char *p1, *p2;
if (! str || ! *str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
char* strrev(char* s)
{
int nlength = strlen(s);
for (size_t i=0;i<strlen(s)/2;i++)
{
char temp;
temp = s[i];
s[i] = s[nlength-i-1];
s[nlength-i-1] = temp;
}
return s;
}