c語言,字串反傳的問題

2007-11-25 10:04 pm
#include <stdio.h>
void rev_str(char * s){
if(*s)
rev_str(s+1);
printf("%c",*s);
}

int main(){
char s[] = "born2c0de";
rev_str(s);
system("pause");
return 0;
}

我知道以上的程式可以正常運作,
但他是逐次印出
e,d,0,...,b來完成的,
不過我想在
rev_str(s);
system("pause");
中間把反轉的字串印出來,ie.cal be reference
這樣的function要怎麼寫?
更新1:

應該是"call by reference"

更新2:

不好意思....有沒有遞迴版本? 謝謝

回答 (3)

2007-11-25 10:38 pm
✔ 最佳答案
rev_sev(s);
就已經是把s的位址過去了(call by reference)
原本的副程式的做法只用用遞迴的方式去找到字串的尾巴
再從尾巴1個1個往回印出來,實際上的字元陣列s並沒有變動
要變動的話,如下...

void rev_str(char * s){
int i,j;
char tmp;
i=0;
j=strlen(s)-1;

while(i<j)
{
tmp=s[i];
s[i]=s[j];
s[j]=tmp;

i++;
j--;
}
}

int main(){
char s[] = "born2c0de";
rev_str(s);
printf("%s",s); //印出s
system("pause");
return 0;
}
2007-11-26 1:15 am
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char* argv[]){
//=====START=====//
char str[]="born2c0de";
printf("%s\n",strrev(str));
//=====END=====//
system("PAUSE");
return 0;
}

2007-11-25 17:17:16 補充:
以上「僅供參考」
參考: 僅供抄襲(為什麼要寫那麼複雜?), 僅供參考
2007-11-25 10:31 pm
他本來就是 call by ref 了,又不是傳 char 進去。原形是 char *


收錄日期: 2021-04-27 17:15:04
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20071125000016KK04907

檢視 Wayback Machine 備份