C語言之字符串逆序函數的三種實現方式
更新時間:2026年04月09日 10:40:33 作者:銘哥的編程日記
文章介紹了三種字符串逆序的方法:非函數、函數非遞歸、函數遞歸,并詳細解釋了每種方法的代碼實現和原理,最后還探討了兩次逆序打印數組的面試題,通過圖解展示了逆序過程
三種方法實現字符串逆序函數
題目如下(示例):
?寫一段代碼實現字符串的逆序打印
例如:
輸入:abcdef 輸出:fedcba
一、第一種方法(非函數)
代碼如下(示例):
//對一個字符串進行逆序
int main()
{
char arr[1000] = { 0 };
gets(arr);
int len = strlen(arr);
char* left = arr;
char* right = arr + len - 1;
while (left < right)
{
char* tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
printf("%s\n", arr);
return 0;
}


二、第二種方法(函數非遞歸)
1.函數的方法
代碼如下(示例):
//寫一個函數(非遞歸)實現逆序字符串
void severse_string(char* str)
{
int len = strlen(str);
char* left = str;
char* right = str + len - 1;
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
severse_string(arr);
printf("%s\n", arr);
return 0;
}

函數和main函數原理一樣!這里不做過多的介紹!
2.函數+數組的方法
代碼如下(示例):
//用數組函數的方法(非遞歸)實現字符串的逆序打印
void severse_string(char arr[])
{
int len = strlen(arr);
int left = 0;
int right = len - 1;
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef";
severse_string(arr);
printf("%s\n", arr);
return 0;
}

三、第三種方法(函數遞歸)
代碼如下(示例):
//用遞歸的(函數)的方法實現對字符串的逆序打印
void reverse_string(char* str)
{
int len = strlen(str);
char tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';
if ((strlen(str + 1)) >= 2)
{
reverse_string(str + 1);
}
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef";
reverse_string(arr);
printf("%s\n", arr);
return 0;
}
注意:
這里的 tmp 和 len 的值可以通過調試來觀察變化!如下圖!




這里是函數在一步一步調用,接下來是遞歸返回的階段~
第一次返回:

第二次返回:

第三次返回:

此時已經對數組全部進行逆序打??!
四、面試題:對一個數組進行兩次逆序打印
題目如下(示例):

1.代碼實現
代碼如下(示例):
void reverse_string(char* l, char* r)
{
while (l < r)
{
char tmp = *l;
*l = *r;
*r = tmp;
l++;
r--;
}
}
int main()
{
char arr[100] = { 0 };
//輸入數組
gets(arr);
//計算數組的大小
int len = strlen(arr);
char* left = arr;
char* right = left + len - 1;
reverse_string(left, right);
//對單詞進行逆序
char* start = arr;
char* cur = arr;
while (*cur!='\0')
{
while (*cur != ' ' && *cur!='\0')
{
cur++;
}
reverse_string(start, cur - 1);
start = cur + 1;
if (*cur != '\0')
{
cur++;//cui原來是空格
}
}
printf("%s\n", arr);
return 0;
}

2.圖解面試題
第一步:整體逆序字符串!

循環(huán):第二步:對單個單詞進行逆序?。?!
1.將第一個字符串逆序

2.將第二個字符串逆序

總結
以上就是今天要講的內容,本文介紹了字符串逆序函數的實現原理和相關的面試題。
這些僅為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C++中rapidjson組裝map和數組array的代碼示例
今天小編就為大家分享一篇關于C++中rapidjson組裝map和數組array的代碼示例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04

