English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

#include
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要怎麼寫?

2007-11-25 09:04:00 · 3 個解答 · 發問者 ? 1 in 電腦與網際網路 程式設計

應該是"call by reference"

2007-11-25 09:07:35 · update #1

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

2007-11-25 12:40:13 · update #2

3 個解答

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 {
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-25 09:38:38 · answer #1 · answered by Peter 3 · 0 0

#include
#include
#include
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 12:15:40 · answer #2 · answered by Big_John-tw 7 · 0 0

他本來就是 call by ref 了,又不是傳 char 進去。原形是 char *

2007-11-25 09:31:20 · answer #3 · answered by 溯源而上 4 · 0 0

fedest.com, questions and answers