我尝试了两种使用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--;
}
}
以上都不奏效。提示为什么?
答案 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:指向字符串的结尾。
然后交换他们的内容
简单易行。