Skip to content

Latest commit

 

History

History
65 lines (54 loc) · 1.12 KB

File metadata and controls

65 lines (54 loc) · 1.12 KB

数组与字符串系列(2)

题目

用C或C++实现void reverse(char *str)函数,即反转一个null结尾的字符串。

解答

关键点:在C或者C++中字符串是以\0结尾的。此题的思路找到字符串的长度,然后两头交换。

交换函数:

void swap(char *lft, char *rht) 
{
     *lft = *lft ^ *rht;
     *rht = *lft ^ *rht;
     *lft = *rht ^ *lft;
}
  • 找到最后一个字符串的指针,然后进行头尾交换。
void revers(char *str) 
{
    if ('\0' == str) {
        return;
    }
    char *p = str;
    char *q = str;
    while (*q) {
        ++q;
    }
    --q;   // last point to character
    while (p < q) {
        swap(p++, q--);
    }
}
  • 遍历字符串获得其长度,再头尾交换
void reverse(char *str) 
{
    if ('\0' == str) {
        return;
    }
    /*
    int len = 0;
    while (str[len] != '\0') {
        len++;
    }

    for (int i = 0, j = len - 1; i <= j; ++i, --j) {
        swap(&str[i], &str[j]);
    }
    */
   int len = strlen(str);
   for (int i = 0; i < len / 2; ++i) {
       swap(&str[i], &str[len - i - 1]);
   }
}