字串反序印

題目是\"是撰寫一函數void reverse(char str[]),它可將字串str反序印出來,舉例來說,輸入的字串為\"hello\",輸出為\"olleh\"字串輸入請用gets()函數,輸出請用puts()函數!

我已經研究很久了~還問同學~但是我們就是打不出來~我們知道有反字串的函數!

但是老師不准我們用!請問可以將程式寫出來並說明嗎?謝謝您!!

已更新項目:

對不起@_@

我沒有說的很清楚= ="

我們老師要我們用這樣的=>

#include

#include

void reverse(char str[]);

int main(void)

{

......

這樣的~是不是要另外再寫一個呼叫他阿???

還有我們老師還沒有教到void reverse(char *str)

這種東西耶@_@

請問那是什麼意思?????

3 個解答

評分
  • 2 0 年前
    最佳解答

    #include<stdio.h>

    void reverse(char *);

    void main()

    {

    char str[300]; //好像有點大 隨便改吧

    printf("input:");

    gets(str);

    reverse(str);

    printf("reverse:");

    puts(str);

    }

    void reverse(char *str)

    {

    int i,j;

    int n;

    char temp;

    for(i=0;*(str+i)!=0;i++); //計算字串長度

    n=i-1; //i不可以變動 所以另外宣告一變數n來儲存長度

    for(j=0;j<i/2;j++,n--) //前後依序往中間互相交換

    {

    temp=*(str+j);

    *(str+j)=*(str+n);

    *(str+n)=temp;

    }

    }

    2006-03-02 15:42:15 補充:

    輸出要用PUTS(S)

    所以一定要修改字串

    2006-03-03 10:23:14 補充:

    那是用來宣告函式的就像我的reverse一樣前方要宣告void reverse(char *);才可以開始定義涵式內容另外void reverse(char *);和void reverse(char str[]);差不多意思 一個是把位址傳到指標 另一個是傳到陣列而陣列 如上面str 也可以當做指標用(*str)

    2006-03-03 10:31:25 補充:

    按照你要的方式把宣告void reverse(char *);改成void reverse(char str[]);之後定義改成void reverse(char str[]){int i,j;int n;char temp;for(i=0;str[i]!=0;i++); n=i-1; for(j=0;j<i/2;j++,n--) {temp=str[j];str[j]=str[n];str[n]=temp;}} 這樣就一樣了

    參考資料: 自己
  • SiYu
    Lv 5
    2 0 年前

    #include <stdio.h>

    char* rev1(char *str,char *strs)

    {

    if( *str == 0 ) return strs;

    else

    {

    char ch=*str;// 儲存目前位置的字元

    char *p=rev1(str+1,strs); // 忽叫自己, 取得要放的位置,

    *p=ch;

    return p+1; // 告訴自己要放到下一個位置

    }

    }

    void reverse(char *str)

    {

    rev1(str,str);

    }

    int main()

    {

    char str[80];

    puts("Please input a string");

    gets(str);

    reverse(str);

    puts("reverse:");

    puts(str);

    return 0;

    }

    參考資料: me
  • ?
    Lv 5
    2 0 年前

    #include<stdio.h>

    #include<string.h>

    void main()

    {

    char string[20];

    int i,n=0;

    printf("請輸入一字串:");

    gets(string);

    n=strlen(string);

    printf("輸出字串為:");

    for(i=n-1;i>=0;i--)

    {

    printf("%c",string[i]);

    }

    printf("\n");

    }

    顯示畫面如下

    請輸入一字串:hello

    輸出字串為:olleh

    2006-03-02 16:58:44 補充:

    沒注意到輸出要用puts,在此做部份修正char string[20];char str;int i,j,n=0;printf("請輸入一字串:");gets(string);n=strlen(string);printf("輸出字串為:");for(i=n-1,j=0;i>=n/2;i--,j++)//後面的字元換到前面{ str=string[i]; string[i]=string[j]; string[j]=str;}puts(string);printf("\n");

    2006-03-02 17:01:20 補充:

    n=strlen(string);//計算string的長度n/2即為需對換的次數若abcdef則需做6/2=3次對換

    參考資料: 自己
還有問題?馬上發問,尋求解答。