gpt4 book ai didi

c - 如何仅使用指针反转字符串?

转载 作者:行者123 更新时间:2023-12-04 00:15:43 24 4
gpt4 key购买 nike

我正在尝试反转一个字符串,但它保持不变。除了<string.h>,我不使用任何模块和 <stdio.h> .

void rev(s){
char i, temp;
char *sf = s;
char ri = strlen((s) - 1);
char *sl = &s[ri];
for (i = 0; i < ri; i++){
if (*sf != *sl){
temp = *sf++;
s[i] = *sl--; //
s[ri--] = temp; //those two seems to be getting new characters, but it won't
}
else {
ri--;
sf++;
sl--;
}
}
printf("%s", s);
}

最佳答案

函数不会编译,至少因为参数没有类型说明符。

void rev(s){

char 类型的可接受值范围很小。所以你不能用它来计算字符串的长度。

本声明中strlen的调用

char ri = strlen((s) - 1);

调用未定义的行为。看来你的意思

char ri = strlen(s) - 1; 

也可以为空字符串调用未定义的行为。

这个循环

for (i = 0; i < ri; i++){

不使用指针。

该函数可以通过以下方式定义,如下面的演示程序所示。

#include <stdio.h>
#include <string.h>

char * reverse( char *s )
{
if ( *s )
{
for ( char *first = s, *last = s + strlen( s ); first < --last; ++first )
{
char c = *first;
*first = *last;
*last = c;
}
}

return s;
}

int main( void )
{
char s1[] = "1";
char s2[] = "12";
char s3[] = "123";

puts( reverse( s1 ) );
puts( reverse( s2 ) );
puts( reverse( s3 ) );
}

程序输出是

1
21
321

关于c - 如何仅使用指针反转字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64101772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com