我试图用函数和一些指针反转一个字符串,但我无法获得更新原始字符串的函数。
#include #include void rev(char* string) { char str2[strlen(string)]; char *p1; char *p2; p1 = string + strlen(string)-1; p2 = str2; while(p1 >= string) *p2++ = *p1--; *p2 = ' '; p2 = p2 - strlen(string); string = p2; // This codesn't seem to update s1 or s2 } int main(void) { char s1[100] = "What does the fox say?"; char s2[100] = "Titanic sinks"; rev(s1); rev(s2); printf("nn%sn", s1); printf("%sn", s2); return 0; }
function有效,但我无法获取main中的字符串以更新反向字符串。 Imo string = p2
应该将字符串更新为它的反转值。 它确实如此,但仅限于function内,而不是主function……
您还需要实现交换语义,否则您将丢失原始字符
void rev(char *s) { if (s != NULL) { int n = strlen(s) - 1; char *p1 = s; char *p2 = s + max(n, 0); while (p2 > p1) { char temp = *p1; *p1++ = *p2; *p2-- = temp; } } }
C使用带指针的传值语义以及任何其他值。 将指针传递给函数时,其值将复制到变量string
。 对string
任何更改都将保留在函数的本地(但将保留对指向的数据的更改)。 您可能希望返回指向修改数据的指针,或者修改字符串“就地”。
好吧,你可以改变这个: string = p2;
对此: strcpy(string, p2);
。
它会工作得很好。
您也可以使用strrev
函数。 在string.h
,定义如下:
char * strrev(char *)
它会将字符串中的所有字符更改为与终止空字符相反的顺序。
例如,下面的代码将数组更改为逆序并将其打印在屏幕上:
char *a = "HELLO";
strrev(a);
printf("%s", a);
以上就是c/c++开发分享用指针反转字符串?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/523220.html