版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第C語言實現(xiàn)字符串字符反向排列的方法詳解目錄前言非遞歸方法1.循環(huán)實現(xiàn)2.函數(shù)實現(xiàn)遞歸方法1.遞歸方法2.遞歸方法小結(jié)
前言
重點的話說在前頭,注意不是逆序打印
今天寫題,碰到一個很好的題,在這里來個大家做個分享,我會用多種方法來解決
題目具體內(nèi)容如下:
編寫一個函數(shù)(遞歸實現(xiàn))
實現(xiàn):將參數(shù)字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函數(shù)庫中的字符串操作函數(shù)
但是這里我不會僅僅局限于題目的要求
非遞歸方法
1.循環(huán)實現(xiàn)
1.1循環(huán)實現(xiàn)(sizeof)
#includestdio.h
intmain()
chararr[]="abcdef";//[abcdef\0]
intsz=sizeof(arr)/sizeof(arr[0]);//sizeof會算上\0
intleft=0;
intright=sz-2;//-2很關(guān)鍵
while(leftright)
chartmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
left++;
right--;
printf("%s\n",arr);
return0;
重難點:看代碼給right賦值的那一行,為什么用的是sz-2?
原因就是sizeof會計算字符串中的\0,會讓計算的數(shù)組元素多1,這里需要減1,再加上數(shù)組第一位從0開始,再減1,故需要減2
1.2循環(huán)實現(xiàn)(strlen)
#includestdio.h
#includestring.h
intmain()
chararr[]="abcdef";//[abcdef\0]
intleft=0;
intright=strlen(arr)-1;//strlen不會算上\0
while(leftright)
chartmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
left++;
right--;
printf("%s\n",arr);
return0;
重難點:這里和1.1形成鮮明的對比,right只需要求出來的數(shù)減1,原因就在strlen不會計算字符串末尾的\0
2.函數(shù)實現(xiàn)
#includestdio.h
#includestring.h
voidreverse(chararr[])//arr[]和*arr是一個意思(都指的首元素地址)
intleft=0;
//intsz=sizeof(arr)/sizeof(arr[0]);
//intright=sz-2;//這里通過函數(shù)調(diào)用的方式時,在函數(shù)內(nèi)部使用sizeof不行,會出錯。。。。。。詳見相關(guān)博客
intright=strlen(arr)-1;//strlen不會算上\0
while(leftright)
chartmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
left++;
right--;
intmain()
chararr[]="abcdef";
reverse(arr);
printf("%s\n",arr);
return0;
重難點:第一個(是我自己一開始沒有理解的),這里的arr[]和*arr是一個意思(都指的首元素地址),也就是說,是一個意思,兩種寫法而已。
第二個,這里的不能通過函數(shù)調(diào)用的方式時,在函數(shù)內(nèi)部使用sizeof計算會出錯,因為數(shù)組傳參傳進(jìn)去的只是首元素的地址,故無法準(zhǔn)確計算出來。
這里sizeof具體解釋我找到了一個寫得蠻好的文章,分享給大家
遞歸方法
1.遞歸方法
結(jié)果和題目一致,但是不滿足題目所給要求,這里只是思路比較簡單
#includestdio.h
#includestring.h
voidreverse(chararr[],intleft,intright)
if(leftright)
chartmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
reverse(arr,left+1,right-1);
intmain()
chararr[]="abcdef";//[abcdef\0]
intleft=0;
intright=strlen(arr)-1;
reverse(arr,left,right);
printf("%s\n",arr);
return0;
重難點:第一這里使用了庫函數(shù)strlen
第二這里自定義的函數(shù)使用了三個參數(shù)
但是!這個思路非常清晰明了
2.遞歸方法
完全滿足題目要求,這里需要注重理解了,思路很重要
#includestdio.h
intmy_strlen(char*str)
intcount=0;
while(*str!='\0')
count++;
str++;
returncount;
voidreverse(char*str)
intlen=my_strlen(str);
chartmp=*str;//1
*str=*(str+len-1);//2
*(str+len-1)='\0';//3
if(my_strlen(str+1)=2)
reverse(str+1);//4
*(str+len-1)=tmp;//5
intmain()
chararr[]="abcdef";//[abcdef\0]
reverse(arr);
printf("%s\n",arr);
return0;
重難點:第一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二硫化碳生產(chǎn)工測試驗證評優(yōu)考核試卷含答案
- 電力通信運(yùn)維員崗前規(guī)章制度考核試卷含答案
- 片基流延工誠信道德能力考核試卷含答案
- 電子玻璃制品鍍膜工安全宣教測試考核試卷含答案
- 安全員考試請假條
- 2025年超細(xì)銀粉末、銀鈀粉、鈀粉、鉑粉項目合作計劃書
- 2026年智能心率帶項目營銷方案
- 2025年江蘇省南通市中考物理真題卷含答案解析
- 2025年山東省日照市中考英語真題卷含答案解析
- 2025康復(fù)醫(yī)學(xué)與技術(shù)專業(yè)知識題庫及答案
- 2026年教育平臺資源輸出協(xié)議
- 【《四旋翼飛行器坐標(biāo)系及相互轉(zhuǎn)換關(guān)系分析綜述》1000字】
- 廣東深圳市鹽田高級中學(xué)2024~2025學(xué)年高一上冊1月期末考試化學(xué)試題 附答案
- 人力資源部2025年度工作總結(jié)與2026年度戰(zhàn)略規(guī)劃
- 2025年安徽理工大學(xué)馬克思主義基本原理概論期末考試參考題庫
- 機(jī)械工程師職稱評定技術(shù)報告模板
- 檔案移交數(shù)字化建設(shè)規(guī)劃
- 孤獨(dú)癥個案護(hù)理
- 建筑施工風(fēng)險辨識與防范措施
- 高職汽車維修專業(yè)培訓(xùn)教材
- 2026年中級注冊安全工程師之安全生產(chǎn)法及相關(guān)法律知識考試題庫500道含答案ab卷
評論
0/150
提交評論