[英]Reverse string with pointers in C
我尝试了以下两种方法来使用字符指针反转 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 到 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;
}
}
要反转字符串,您应该在字符串的开头和结尾之间交换字符,直到它们在中间相遇,您所做的方式将反转它,然后再次将其反转为原始字符串。 标准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;
}
}
使用指针完成工作示例:
#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:指向字符串的结尾。
然后交换它们的内容。
简单易行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.