C語言-創(chuàng)新互聯(lián)

在以前我寫過類似問題的博客,是倒置單詞http://t.csdn.cn/rqhRL

創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站建設、網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務確山,10年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575

目錄

一、問題描述

二、分析與設計

三、代碼實現(xiàn)


一、問題描述

實現(xiàn)一個函數(shù),可以左旋字符串中的k個字符。

例如:

ABCD左旋一個字符得到BCDA

ABCD左旋兩個字符得到CDAB

二、分析與設計

按照常規(guī)思路,逆序第一步就是先把第一個字符取出,然后把后邊的字符向前移動,接著把第一個字符放到\0之前。然后繼續(xù)進行,知道逆序完成最后一個字符,結(jié)束逆序。

但是,很顯然這不算最好的方法。

更好的方法如下:

首先逆序前k個字符,然后逆序剩下的字符,最后把所有除了\0之外的字符逆序。

例如,在字符串a(chǎn)bcdef中逆序前兩個字符,那么就要先把ab逆序成ba,然后把cdef逆序成fedc,最后整體逆序成cdefab:

三、代碼實現(xiàn)
#include 
void reverse(char* left, char* right)
{
	assert(left);
	assert(right);
	while (left< right)
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
void left_move(char arr[], int k)
{
	int len = strlen(arr);
	k %= len;
	//逆序左
	reverse(arr, arr + k - 1);
	//逆序右
	reverse(arr + k, arr + len - 1);
	//逆序整體
	reverse(arr, arr + len - 1);
}
int main()
{
	char arr[] = "abcdef";
	int k = 8;
	left_move(arr, k);
	printf("%s\n", arr);
	return 0;
}

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

新聞名稱:C語言-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://muchs.cn/article16/poedg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、網(wǎng)站內(nèi)鏈、網(wǎng)站策劃、網(wǎng)站設計公司、ChatGPT網(wǎng)站導航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化