//題目要求要求:不能使用C函數(shù)庫中的字符串操作函數(shù)
(否則本題也沒什么意義了?。?/p>
<1>非遞歸方法
此方法基本思想是設(shè)立兩個(gè)指針,分別指向字符串的頭尾
并且依次交換所指向的數(shù)據(jù),代碼中為left和right
源代碼:
#include
#include
#include//因?yàn)橐褂胹trlen()語句
void reverse_string(char str[])
{
int temp;
char *left = str;
char *right = str + strlen(str) - 1;
while (*left <* right)
{
temp = *left;
*left = *right;
*right = temp;
*right--;
*left++;
}
}
int main()
{
char str[] = "chooseyou";
printf("%s\n", str);
reverse_string(str);
printf("%s", str);
system("pause");
return 0;
}
<2>遞歸方法
遞歸方法思想如下圖
類似于非遞歸的left與right指針?biāo)笖?shù)據(jù)互換
遞歸時(shí)只訂立一個(gè)指針,每一次通過未交換字符串的長(zhǎng)度(len)來表示所指向的元素的字符串倒數(shù)除\0外第一個(gè)元素。
每一次的遞歸將指針?biāo)傅脑貎?chǔ)存進(jìn)一個(gè)變量,并且將倒數(shù)第一個(gè)元素(除\0外),與所知元素?fù)Q再把最后元素置為\0,然后改變len進(jìn)行下次遞歸。
最后的效果是字符串由長(zhǎng)變短再變長(zhǎng)得以完成反向排列
詳解如圖
源代碼:
#include
#include
void reverse_string(char *str)
{
int len = strlen(str);
char temp=*str;//當(dāng)前所指元素
*str = *(str + len - 1);//除\0外最后一個(gè)元素
*(str + len - 1) = '\0';//置\0
if (strlen(str + 1) >= 2)//長(zhǎng)度小于等于1則不需要交換
{
reverse_string(str + 1);
}
*(str + len - 1) = temp;//將儲(chǔ)存的元素反序序放回字符串完成反向排序
}
int main()
{
char str[] = "chooseyou";
printf("%s\n", str);
reverse_string(str);
printf("%s\n", str);
system("pause");
return 0;
}
注意:要修改的字符串要以數(shù)組類型存儲(chǔ)(str[]),*str儲(chǔ)存為只讀類型,強(qiáng)行寫值會(huì)出錯(cuò)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。