*繁星舞兮* 10 發表於 October 21, 2006 檢舉 Share 發表於 October 21, 2006 subject: 關於指標移動~這題其實是這週資料結構的作業之一...其中要求我們撰寫一個函數可以使輸入字串反向排序EX.input:123456output:654321實作如下,已達成老師要求。-- code --0001 char *strrev(char *string)0002 {0003 int i=0,j;0004 char temp; 0005 char *ptr=string; //由後往前指標0006 char *ptr2=string; //前往後指標0007 0008 while(*ptr++!='\0'){i++;}; //將指標指向最後and計算字串長度0009 *ptr--; //避免寫到結束字元0010 *ptr--; //刪掉就不行...怪0011 0012 i=i/2; //決定交換次數0013 for(j=0;j<i;j++){0014 temp=*(ptr2+j);0015 *(ptr2+j)=*(ptr-j);0016 *(ptr-j)=temp;0017 } 0018 return string;0019 }--不懂的是在上述第9行 *ptr-- 卻需要再重複1次才能正確執行指標移動的單位是1個字元,而字串結尾符號'\0'卻是2個字元???怎麼算都不會是2個字元....這詭異的狀況有人知道嗎???--Ps. 這篇同時Po於ptt及微風 如解決了再同時修改主題~ (H) 鏈接文章 分享到其他網站
ian_chou821 10 發表於 October 22, 2006 檢舉 Share 發表於 October 22, 2006 while(*ptr++!='\0'){i++;};這行 假設一個字元陣列 char x[5]x[3]='\0'則當*ptr=='\0' 這時ptr指向x[3] 但跳出迴圈後 ptr會再+1即跳出迴圈後會指在x[4]的位置要解決這個問題 可以考慮把ptr++寫到迴圈裡面 鏈接文章 分享到其他網站
*繁星舞兮* 10 發表於 October 22, 2006 作者 檢舉 Share 發表於 October 22, 2006 while(*ptr++!='\0'){i++;};這行 假設一個字元陣列 char x[5]x[3]='\0'則當*ptr=='\0' 這時ptr指向x[3] 但跳出迴圈後 ptr會再+1即跳出迴圈後會指在x[4]的位置要解決這個問題 可以考慮把ptr++寫到迴圈裡面了解~ ^^"發現改成 *(++ptr) 就可以正確執行了~ 居然敗在這種地方... 果然基本功沒打好是不行的~:| 鏈接文章 分享到其他網站
Recommended Posts
請登入後來留意見
在登入之後,您才能留意見
立即登入