[題目分析]實現字符串的逆置並不難但本題要求不另設串存儲空間來實現字符串逆序存儲即第一個輸入的字符最後存儲最後輸入的字符先存儲使用遞歸可容易做到
void InvertStore(char A[])//字符串逆序存儲的遞歸算法
{ char ch;
static int i = ;//需要使用靜態變量
scanf (%c&ch);
if (ch!= ) //規定是字符串輸入結束標志
{InvertStore(A);
A[i++] = ch;//字符串逆序存儲
}
A[i] = \; //字符串結尾標記
}//結束算法InvertStore
串s可以看作由以下兩部分組成caabcbcaa和 caa設這兩部分分別叫串s和串s要設法從ss 和s中得到這兩部分然後使用聯接操作聯接s和s得到s
i=index(ss); //利用串s求串s在串s中的起始位置
s=substr(silength(s) i + ); //取出串s
j=index(ss); //求串s在串s中的起始位置s串中bcb後是caa)
s=substr(sj+length(s) j ); //形成串s
s=concat(ss);
[題目分析]對讀入的字符串的第奇數個字符直接放在數組前面對第偶數個字符先入棧到讀字符串結束再將棧中字符出棧送入數組中限於篇幅這裡編寫算法未編程序
void RearrangeString()//對字符串改造將第偶數個字符放在串的後半部分第奇數個字符前半部分
{char chs[]stk[]; //s和stk是字符數組(表示字符串)和字符棧
int i=j; //i和j字符串和字符棧指針
while((ch=getchar())!=#)// #是字符串結束標志
s[i++]=ch; //讀入字符串
s[i]=\; //字符數組中字符串結束標志
i=;j=;
while(s[i]) //改造字符串
{if(i%==) stk[i/]=s[i]; else s[j++]=s[i];
i++; }//while
i; i=i/; //i先從\後退是第偶數字符的個數
while(i>) s[j++]=stk[i] //將第偶數個字符逆序填入原字符數組
}
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/22604.html