字符串逆序有多種辦法,下面我們分方法而論: // 非遞歸實現字符串反轉: char *reverse(char *str) { if( !str ) { return NULL; } int len = strlen(str); int i,j; char temp; for( i = 0,j=len-1; i<j;i++,j--) { // 交換前後兩個相應位置的字符 temp=str[i]; str[i]=str[j]; str[j]=temp; } return str; } int main() { char src[] = {"abcdef"}; char *pdest = reverse(src); puts(src); return 0; } //遞歸就是一種棧結構: #include<stdio.h> #include<assert.h> void reverse_string(const char * const string) { assert(string); if (*string == '\0') return; else reverse_string(string+1);// 先將字符壓棧 putchar(*string);// 再將字符按照先進後出的順序輸出 } int main() { char string[20] = {0}; scanf("%[^\n]",string); reverse_string(string); printf("\n"); return 0; } 亦可:(若要求不使用其他庫函數) #include<stdio.h> #include<assert.h> int my_strlen(const char *string) { assert(string); if(*string == '\0') { return; } else return 1+my_strlen(string+1); } char *reverse_string(char *string,int len) { assert(string); if(!string) { return NULL; } if(len > 1) { char tmp = string[0]; string[0] = string[len-1]; string[len-1] = '\0'; // 最後一個字符在下次遞歸時不再處理 reverse_string(string + 1,len-2);//遞歸調用,每調用一次,要反轉的字符串分別從頭和末尾各減少一個 string[len-1] = tmp; } return string; } int main() { char string[20] = {0}; int len; scanf("%s",string); len = my_strlen(string); reverse_string(string,len); printf("%s\n",string); return 0; }