成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

C語言基礎——字符串逆序(遞歸實現(xiàn),不使用庫函數(shù))

suosuopuo / 1385人閱讀

摘要:對于這題,我們要特別注意的是是字符串中的字符反向排列,不是逆序打印下面我會分別用非遞歸和遞歸的方法介紹本題。調用實現(xiàn)字符串逆序的函數(shù)。當字符串的長度為奇數(shù)時,中間只剩一個數(shù)組元素,并不需要交換,增加限制條件,讓遞歸最后停下。

對于這題,我們要特別注意的是:是字符串中的字符反向排列,不是逆序打印!

下面我會分別用非遞歸遞歸的方法介紹本題。

從main()函數(shù)入手

  1. 定義一個數(shù)組。
  2. 調用實現(xiàn)字符串逆序的函數(shù)。——本題核心
  3. 打印交換后的數(shù)組。
int main(){	char arr[] = "abcdefg";	reverse_string(arr);	printf("%s/n",arr);	return 0;}

自定義strlen()函數(shù),計算數(shù)組長度

int my_strlen(char* arr){	int count = 0;	while (*arr!="/0")	{		count++;		arr++;	}	return count;}

法一(非遞歸)

  1. 定義函數(shù)類型:這里只是交換數(shù)組,不需要參數(shù)返回,所以用void。
  2. 定義兩個指針:char* leftchar* right,分別指向數(shù)組首元素地址和數(shù)組最后一個元素的地址。
  3. 交換數(shù)組元素。
void reverse_string(char* arr){	char* left = arr;	char* right = arr + my_strlen(arr) - 1;  //my_strlen計算出的數(shù)組長度包括了‘/0’,因此-1獲得整個數(shù)組的長度,再+arr指向最后一個元素的地址。	    while (left < right)	{		char tmp = *left;		*left = *right;		*right = tmp;		left++;		right--;	}}

法二 (遞歸)

解題思路:

  1. 數(shù)組char arr[] = "a b c d e f g /0" 中,每一次都交換第一個元素和最后一個元素,再加上中間元素的交換函數(shù)。
  2. 如:第一次交換 "g? reverse_string(char* arr)? a? /0"。注意:先不著急把a放入最后一個元素的地址中,令最后一個數(shù)組元素成‘/0’,a存儲到臨時變量tmp里。如:"g? reverse_string(char* arr)??/0",?tmp=a。(原因:逆序函數(shù)傳進去的是一個字符串。若不這樣操作逆序函數(shù)再次調用的時候無法進行,因為此時中間剩余元素不是一個字符串)
  3. 實現(xiàn)遞歸都要有一個限制條件,若沒有限制條件則會出現(xiàn)死遞歸。當字符串的長度為奇數(shù)時,中間只剩一個數(shù)組元素,并不需要交換,增加限制條件if(strlen(arr)>1),讓遞歸最后停下。
  4. 最后把第一個元素放入最后一個元素的地址中。
void reverse_string(char* arr){	char* left = arr;	char* right = arr + my_strlen(arr) - 1;	char tmp = *left;  //臨時變量,暫時存放第一個數(shù)組元素	*left = *right;	*right = "/0";	if(strlen(arr)>1)	reverse_string(arr + 1);  //left指針指向第二個數(shù)組元素	*right = tmp;}

代碼整體實現(xiàn)及結果

#define _CRT_SECURE_NO_WARNINGS 1#includeint my_strlen(char* arr){	int count = 0;	while (*arr!="/0")	{		count++;		arr++;	}	return count;}非遞歸版本//void reverse_string(char* arr)//{//	char* left = arr;//	char* right = arr + my_strlen(arr) - 1;//	while (left < right)//	{//		char tmp = *left;//		*left = *right;//		*right = tmp;//		left++;//		right--;//	}//}void reverse_string(char* arr){	char* left = arr;	char* right = arr + my_strlen(arr) - 1;	char tmp = *left;	*left = *right;	*right = "/0";	if(strlen(arr)>1)	reverse_string(arr + 1);	*right = tmp;}int main(){	char arr[] = "abcdefg";	reverse_string(arr);	printf("%s/n",arr);	return 0;}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/123959.html

相關文章

  • Python | 遞歸

    摘要:那假如我們用遞歸來描述這種情況呢定義基本情況其它情形所以在上述求和中的定義又用到了自己本身的定義,這就構成了遞歸。 說起遞歸,我覺得其實大部分人應該是不陌生的,遞歸廣泛存在于生活中。比如: showImg(https://segmentfault.com/img/remote/1460000007420204?w=294&h=450); The woman in this image ...

    qieangel2013 評論0 收藏0
  • 常見八大排序(C語言實現(xiàn))及動圖演示

    摘要:當?shù)竭_時等同于直接插入排序,此時序列已基本有序,所有記錄在統(tǒng)一組內排好成有序序列。當面對大量數(shù)據(jù)時,希爾排序將比直接插入排序更具優(yōu)勢圖示講解第一趟取增量,所有間隔為的元素分在一組,在各個組中分別進行直接插入排序。 ...

    不知名網友 評論0 收藏0
  • 小李飛刀:做題第十一彈!

    摘要:第五題對稱二叉樹難度簡單給定一個二叉樹,檢查它是否是鏡像對稱的。第十六題最大連續(xù)的個數(shù)難度簡單給定一個二進制數(shù)組,計算其中最大連續(xù)的個數(shù)。第十八題平方數(shù)之和難度簡單給定一個非負整數(shù),你要判斷是否存在兩個整數(shù)和,使得。 寫在前面 最近忙著調教新裝備,沒有及時的寫題解,但是沒有在偷懶沒刷題喔~來認真整理下最近做的題目~ 之前考慮按tag來刷題,后來收到了推薦的leetcode題解,就根據(jù)上...

    ytwman 評論0 收藏0
  • 【零基礎趣學C語言】- 史上最全C語言函數(shù)詳解(萬字圖文+代碼演示+圖解)

    摘要:語言在設計中考慮了函數(shù)的高效性和易用性兩個原則。在語言中,最常見的當屬函數(shù)了。以上就是一個函數(shù),它被稱為語言的入口函數(shù),或者主函數(shù)。例如和都是函數(shù)名。形式參數(shù)當函數(shù)調用完成之后就自動銷毀了。 ...

    468122151 評論0 收藏0

發(fā)表評論

0條評論

suosuopuo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<