C语言字符串逆转函数

我对传址调用的格式一只很迷茫。。。。。写的一团糟,麻烦详细讲解一下,或者做一下这个题作为例子:1)请使用数组元素存取方式,设计实现一个函数可以将任意字符数组元素存放位置逆转的程序。2)请使用指针存取方式完成第一题。为了方便我就把我写的贴上来。。虽然一大堆错误。。。。
#include <stdio.h>
int main()
{
void nizhuan(char []);
int i,j,n;
char a[100];
printf("请输入字符串,以结束:");
for(i=0;a[i]!='@';i++)
scanf("%c",&a[i]);
nizhuan(a);
}
void nizhuan(char a[])
{
int i,j,n;
char t;
for(i=0;;i++)
if(a[i]='@')
break;
i--;
n=(i+1)/2;
for(j=0;j<n;j++,i--)
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
}

    只需要将字符数组的前后数据进行交换就行了。


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

    char* reverse(char *x)
    {
        int i, tem, len = strlen(x);
        int n = len / 2;
        for (i = 0; i <= n; i++)  // å‰åŽäº¤æ¢æ•°æ®
        {
            tem = x[i];
            x[i] = x[len - 1 - i];
            x[len - 1 - i] = tem;
        }
        return x;
    }

    int main()
    {
        char p[] = "abcdefghijk";
        printf("relust = %s\n", reverse(p));
        return 0;
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
你的逻辑是对的,转置函数也是对的。就是有三个小问题:
#include <stdio.h>
int main(){
void nizhuan(char []);
int i,j,n;
char a[100]={0};
printf("请输入字符串,以@结束:");
/********输入有问题:你要判断之前输入的是不是@,而不是判断将要输入的是不是@*******/
scanf("%c",&a[0]);
for(i=1;a[i-1]!='@';i++)
scanf("%c",&a[i]);
/********输入*******/
nizhuan(a);
printf("%s",a); /* 缺少输出 */
}
void nizhuan(char a[]){
int i,j,n;
char t;
for(i=0;;i++)
if(a[i]=='@') /* 等号错误 */
break;
i--;
n=(i+1)/2;
for(j=0;j<n;j++,i--)
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
}追问

非常感谢!!那么能否讲解一下传址调用的格式??有些迷茫。。。

追答

你这个就属于地址调用的一种,你传的是字符串,其实传进去就是字符指针。
所谓地址调用,就是这个样子:
void SetA(int* pa)
{
*pa=5; //这边pa是一个指针,要使用pa指向的值或者要改变pa指向的值就要用*pa;
pa[0]=5; //这一句和上一句是等价的。
}
int main()
{
int a=4;
SetA(&a); //传进去的是你想改变的变量的地址,或者是数组的某一个指针。
printf("%d\n",a); // a=5
}

本回答被提问者和网友采纳
相似回答