使用C

时间:2016-06-18 22:49:37

标签: c pointers reverse

我尝试了两种使用char指针在C中反转字符串的方法:

选项1:

void stringreverse(char *s){
    int n = stringlength(s) - 2;

    while(*s != '\0'){
        char c = *s;
        *s = *(s+n);
        *(s+n) = c;
        s++;n--;
    }       
}

选项2:

void stringreverse(char *s){
    char *p = s + stringlength(s) - 2;

    while(*s != '\0'){
        char c = *s;
        *s = *p;
        *p = c;
        s++,p--;
    }   
}

以上都不奏效。提示为什么?

3 个答案:

答案 0 :(得分:2)

问题是你的代码反转字符串然后再次反转它,因为你的循环从0变为len(当* s == \ 0时),它应该停在(len-1)/ 2

你应该试试这个:

void stringreverse(char* s){
  int len = strlen(s)-1;
  int i;
  for(i=0;i<len/2;i++){
    char tmp = s[i];
    s[i] = s[len-i];
    s[len-i]=tmp;
  }
}

答案 1 :(得分:0)

要反转字符串,你应该在字符串的开头和结尾之间交换字符,直到它们在中间相遇,你​​所采用的方式将它反转,然后再将它反转为原始字符串。标准C中也有strlen。无论如何使用stringlength的定义,它应该是:

void stringreverse(char *s){
    int n = stringlength(s) - 2;
    int i;
    while(i = 0; i < n / 2; i++) {
        char c = s[i];
        s[i] = s[n-i];
        s[n-i] = c;
    }       
}

答案 2 :(得分:0)

使用指针完成工作样本:

#include <stdio.h>    
void reverse(char *p){
    char c;
    char* q = p;
    while (*q) q++;
    q--; // point to the end
    while (p < q){
        c = *p;
        *p++ = *q;
        *q-- = c;
    }
}

int main(){
    char s[] = "DCBA";
    reverse(s);
    printf("%s\n", s); // ABCD
}

p:指向字符串的开头。
q:指向字符串的结尾。
然后交换他们的内容 简单易行。