C語言之字符串逆序函數(shù)的三種實現(xiàn)方式
三種方法實現(xiàn)字符串逆序函數(shù)
題目如下(示例):
?寫一段代碼實現(xiàn)字符串的逆序打印
例如:
輸入:abcdef 輸出:fedcba
一、第一種方法(非函數(shù))
代碼如下(示例):
//對一個字符串進行逆序
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;
}


二、第二種方法(函數(shù)非遞歸)
1.函數(shù)的方法
代碼如下(示例):
//寫一個函數(shù)(非遞歸)實現(xiàn)逆序字符串
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;
}

函數(shù)和main函數(shù)原理一樣!這里不做過多的介紹!
2.函數(shù)+數(shù)組的方法
代碼如下(示例):
//用數(shù)組函數(shù)的方法(非遞歸)實現(xiàn)字符串的逆序打印
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;
}

三、第三種方法(函數(shù)遞歸)
代碼如下(示例):
//用遞歸的(函數(shù))的方法實現(xiàn)對字符串的逆序打印
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 的值可以通過調試來觀察變化!如下圖!




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

第二次返回:

第三次返回:

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

1.代碼實現(xiàn)
代碼如下(示例):
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 };
//輸入數(shù)組
gets(arr);
//計算數(shù)組的大小
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.將第二個字符串逆序

總結
以上就是今天要講的內容,本文介紹了字符串逆序函數(shù)的實現(xiàn)原理和相關的面試題。
這些僅為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C語言求Fibonacci斐波那契數(shù)列通項問題的解法總結
斐波那契數(shù)列相關問題是考研和ACM中常見的算法題目,這里特地為大家整理了C語言求Fibonacci斐波那契數(shù)列通項問題的解法總結,需要的朋友可以參考下2016-06-06
C語言實現(xiàn)圖書管理系統(tǒng)(文件數(shù)據(jù)庫)
這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例
這篇文章主要介紹了C語言實現(xiàn)數(shù)組的循環(huán)移位的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
C++中rapidjson組裝map和數(shù)組array的代碼示例
今天小編就為大家分享一篇關于C++中rapidjson組裝map和數(shù)組array的代碼示例,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04

