C语言 把字符串前后倒置

2025-02-22 15:10:27
推荐回答(3个)
回答1:

你这里的*t = s; 只表示定义了一个新指针,还是指向原来s数组存储的空间。

其实完全可以一次循环搞定,第0位置与第n-1个位置互换就行了,依次类推,

n为偶数时,n/2 - 1 与 n/2互换,如n为10,则0-9位置有效,4和5换;

n为奇数时,n/2 - 1 与 n/2 + 1互换,如n为11时,0-10位置有效,5在中间,4和6换;

实际上是循环n/2次,i 与 [(n-1) - i ]互换。

注意的是第n位置是'\0',不用换。

void fun(char*s)
{
   int i,j=0,n;
   char temp;
   n=strlen(s);
    for(i=0;i        temp = s[i];
        s[i] = s[n-1-i];
        s[n-1-i] = temp;
    }
}

回答2:

这样改就好了:

void fun(char*s)
{
int i,j=0,n;
char t[100];//t不要和s指向同一个字符串,不然后面的赋值操作有点乱套。
n=strlen(s);
for(i=n-1;i>=0;i--)//i==0的时候也要复制过去。
t[j++]=s[i];
for(i=0;is[i]=t[i];
s[++i]='\0';
}

回答3:

可以之间调用库函数strrev()

你可以这样写:

void srev(char *s)
{
    char *p = s, *q = &s[strlen(s)-1];
    char tmp;
    
    while(p    {
    tmp = *p;
    *p = *q;
    *q = tmp;
    p++, q--;
   }      
}