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:\n");
    gets(a);
    char *p1;
    int i,n;
    i=0;
    p1=a;
    while(*(p1+i)!=0)//超出地址結果為0
    {
        i++;
    }
    n=i;
    change(a,n);
    printf("output:\n%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--;
        }
}

運行結果:,要是數字數組的話也是差不多的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM