国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

suosuopuo / 1373人閱讀

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

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

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

從main()函數入手

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

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

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

法一(非遞歸)

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

法二 (遞歸)

解題思路:

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

代碼整體實現及結果

#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;}

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

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

相關文章

  • Python | 遞歸

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

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

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

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

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

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

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

    468122151 評論0 收藏0

發表評論

0條評論

suosuopuo

|高級講師

TA的文章

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