用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回。
分析: 可以通过交换首尾字符,实现字符串的反转,即就地反转。
代码实现:
void revert(char *str) {
assert(NULL != str);
if( NULL == str) return ;
char *head = str;
char *tail = head + strlen(str) - 1;
while(head < tail) swap(head++, tail--);
}
void swap(char *p, char *q) {
char tmp = *p;
*p = *q;
*q = tmp;
}
version2:
void revert(char *str) {
assert(NULL != str);
if( NULL == str) return ;
char *head = str;
char *tail = str;
while(*tail) ++tail; // tail 指向‘\0';
--tail; //tail 指向'\0'的前一个字符;
while(head < tail) swap(head++, tail--);
}
void swap(char *p, char *q) {
char tmp = *p;
*p = *q;
*q = tmp;
}
求字符串长度strlen():
int strlen(const char *str) {
assert(NULL != str);
char *tail = str;
while(*tail++); // 使tail指向'\0';
return tail - str;
}