逆序輸出有很多種,具體的實現(xiàn)方法取決于你題目的要求
創(chuàng)新互聯(lián)公司憑借專業(yè)的設(shè)計團隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站設(shè)計、做網(wǎng)站、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務,在成都十載的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都超過千家中小型企業(yè)策劃設(shè)計了網(wǎng)站。
1. 如果只是要求逆序輸出,那么可以采用類似的方法:
void reverse(char *s)
{
if(*s=='\0')
return;
reverse(s+1);
printf("%c",*s);
}
這種方法在s很長的情況下會一直遞歸到底,不是很好。
2. 如果需要將字符串整個逆序在函數(shù)外面輸出,那么可能希望采用返回字符串指針的方式;實現(xiàn)如下:
char * reverse( char* s )
{
static char *p = s+strlen(s)-1; //p是一個靜態(tài)變量,指向當前遞歸層處理的字符串尾,而s指向字符串頭
if(s p)
{
char c = *p; //交換頭尾字符
*p = *s;
*s = c;
p--; //尾向前挪一個
reverse(s+1); //相當于頭向后挪一個
}
return s;
}
3.1 當然,有的時候,并不需要reverse函數(shù)本身遞歸,而是可以借助一些輔助的遞歸函數(shù),比如說:
void reversehelp(char * head, char * end)
{
if (head end)
{
char c = *head;
*head = *end;
*end = c;
reversehelp(++head, --end);
}
}
然后在調(diào)用時像這樣調(diào)用:
char * reverse(char * s)
{
char * end = s + strlen(s) - 1;
reversehelp(s, end);
return s;
}
3.2 類似的輔助函數(shù)還可以采用一個字符串指針和一個長度參數(shù)的方式,如下例:
void reversehelp( char* s, int n )
{
if ( n 1 )
{
char c = s[n-1];
s[n-1] = s[0];
s[0] = c;
reversehelp( s+1, n-2 );
}
}
然后在調(diào)用時如下:
char *reverse(char *s)
{
reversehelp( s, strlen(s) );
return s;
}
是的,getchar()函數(shù)是這樣使用的(括號中不帶參數(shù))。
看起來這一段代碼是用來復制字符串的。
int a[6];應當改為:
char a[100];
前面的兩段for循環(huán)應當改為:
for(i=0;i=a[0];i++)
a[i+1]=n[i];
其余的(包括第三個for循環(huán))不變,就可以了。
調(diào)用下面的函數(shù)將字符串逆序,然后輸出到文件即可。
char*?str_reverse(char*?str)
{????
int?n?=?strlen(str)?/?2;
int?i?=?0;
char?tmp?=?0;
for(i?=?0;?i??n;?i++)
{
tmp??=?str[i];
str[i]?=?str[strlen(str)-i-1];
str[strlen(str)-i-1]?=?tmp;
}
return?str;
}