C:函数:功能:实现字符数组中所有字母的倒序存放并输出

前两天小测碰到一道题,建立一个函数,功能:实现字符数组中所有字母的倒序存放并输出,一开始觉得简单跟数字数组差不多,运行一下发现很多格式错误,这些是不必要的错误,现在就来说下,先说一下代码思路:定义一个字符数组假如有n个字符,让一个指针变量*p指向首地址,*(p+n-1)就是末地址,然后实现*p与*(p+n-1)值的互换,这边让*q=*(p+n-1)每换一次,p++,q--,当p>q时退出循环,我们来看下代码:

 1 #include "stdio.h"
 2 char change(char *p,int y);
 3 void main()
 4 {
 5     char a[6]="abcdef";
 6     change(a,6); 
 7     printf("%s",a);
 8 }
 9 char change(char *p,int y)
10 {
11     char *q;
12     int temp;//这边比较容易错,有的定性思维,会定义成char类型;
13     q=p+y-1;
14     while(p<q)
15     {
16         temp=*p;
17         *p=*q;
18         *q=temp;
19         p++;
20         q--;
21         }
22 }

这边只是令n=6,看的更清晰一点,要复杂一点的话,我们也可以自己输入字母,想要几个就几个,这次我用gets()来输入,假如输入n个,那我们怎么知道这个n的值,我们可以先定义*p1让p=a,既指向首地址,要是超过末地址也就是*(p+n)==0,这就给我们一个结束循环的条件:

#include "stdio.h"
void main()
{
    char a[1000];
    gets(a);
    char *p;
    int i,n;
    i=0;
    p=a;
    while(*(p+i)!=0)
    {
        i++;
        
    }
    n=i;
    printf("%d",n);
}

上面代码可以求出我们手动输入字母的个数再加上change()函数就可以了:

#include "stdio.h"
char change(char *p,int y);
void main()
{
    char a[1000];
    printf("input letter:
");
    gets(a);
    char *p1;
    int i,n;
    i=0;
    p1=a;
    while(*(p1+i)!=0)//超出地址结果为0
    {
        i++;
    }
    n=i;
    change(a,n);
    printf("output:
%s",a);
}
char change(char *p,int y)
{
    char *q;
    int temp;
    q=p+y-1;
    while(p<q)
    {
        temp=*p;
        *p=*q;
        *q=temp;
        p++;
        q--;
        }
}

运行结果:,要是数字数组的话也是差不多的。

原文地址:https://www.cnblogs.com/doudoublog/p/5041450.html