最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言左旋字符串的三種實(shí)現(xiàn)方式

 更新時間:2024年03月21日 09:57:33   作者:李白同學(xué)  
本文章將使用三種思路實(shí)現(xiàn)字符串的左旋(循環(huán)移動,截取和拼接,逆序反轉(zhuǎn)),文中通過代碼示例和圖文介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下

題目:

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

例如:
ABCD左旋一個字符得到BCDA
ABCD左旋兩個字符得到CDAB

方法一:

我們畫個圖分析一下:

基本邏輯:

就是我們每一次旋轉(zhuǎn)之前,我們就取出 arr 數(shù)組的首元素存放在 tmp 中,然后將 arr 數(shù)組剩余的每一個元素都往前移動一位,最后我們再把 tmp 中的元素放回 arr 數(shù)組末尾的位置。

實(shí)現(xiàn)算法:

我們發(fā)現(xiàn),abcd 4個字符旋轉(zhuǎn) k = 4 個字符時,數(shù)組就回到了本身數(shù)組 abcd 。這時,我們可以這樣理解,雖然我們旋轉(zhuǎn)了4個字符,但我們實(shí)際上我們旋轉(zhuǎn)了0個字符;依次類推,旋轉(zhuǎn)5個字符,實(shí)際上旋轉(zhuǎn)了1個字符;接下去也是如此......接下來,我們再把字符長度加長,變成abcde 5個字符,旋轉(zhuǎn) k = 5 個字符時,數(shù)組就回到了本身數(shù)組 abcde,后面的分析就跟4個字符分析是一樣的。然后,我們能夠得到這樣一個表達(dá)式 num(實(shí)際次數(shù)) = k % len(數(shù)組字符個數(shù))。

代碼實(shí)現(xiàn):

#include <stdio.h>
#include <string.h>
 
void Turn_left(char arr[],int k)
{
	int len = strlen(arr);
	//求得真實(shí)的旋轉(zhuǎn)次數(shù)
	int num = k % len;
	for (int i = 0; i < num; i++)
	{
		//每次移動一個
		char tmp = arr[0];
		int j = 0;
		for (j = 0; j < len - 1; j++)
		{
			//移動數(shù)據(jù)
			arr[j] = arr[j + 1];
		}
		arr[j] = tmp;
	}
}
int main()
{
	char arr[] = "abcd";
	int k = 0;
	scanf("%d", &k);//輸入旋轉(zhuǎn)字符個數(shù)
	Turn_left(arr, k);
	printf("%s\n", arr);
 
	return 0;
}

運(yùn)行結(jié)果:

方法二:

我們也可以畫個圖分析一下:

這里我們要用到兩個函數(shù):

strcpy() //字符串拷貝
strcpy(str1,str2)//將str2的元素拷貝到str2中
 
 
strncat()//這也是字符串拷貝
strncat(tmp,arr,k)//把a(bǔ)rr開始的元素 拷貝到tmp這個字符串的后面,拷貝k個

代碼實(shí)現(xiàn):

#include <stdio.h>
#include <string.h>
 
void Turn_left(char arr[], int k)
{
	int len = strlen(arr);
	int num = k % len;
	char tmp[1000] = { 0 };
	//從arr + num的位置 開始拷貝字符串到tmp里面 
	strcpy(tmp, arr + num);
 
	//把a(bǔ)rr開始的元素 拷貝到tmp這個字符串的后面,拷貝num個
	strncat(tmp, arr, num);
 
	//最后將tmp整個數(shù)組元素復(fù)制到arr數(shù)組中
	strcpy(arr, tmp);
}
 
int main()
{
	char arr[] = "abcd";
	int k = 0;
	scanf("%d", &k);//輸入旋轉(zhuǎn)字符個數(shù)
	Turn_left(arr, k);//2
	printf("%s\n", arr);
 
	return 0;
}

運(yùn)行結(jié)果:

方法三:

最后一種方式我們也畫圖分析一下:

代碼實(shí)現(xiàn):

#include <stdio.h>
 
void Reverse(char arr[], int i, int j)
{
	while (i < j)
	{
		char tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
		i++;
		j--;
	}
}
 
void Turn_left(char arr[], int k)
{
	int len = strlen(arr);
	int num = k % len;
	//將num位置前面的元素逆序
	Reverse(arr, 0, num - 1);
 
	//將num位置以及之后的元素逆序
	Reverse(arr, num, len - 1);
 
	//整個數(shù)組逆序
	Reverse(arr, 0, len - 1);
}
 
 
int main()
{
	char arr[] = "abcd";
	int k = 0;
	scanf("%d", &k);//輸入旋轉(zhuǎn)字符個數(shù)
	Turn_left(arr, k);//2
	printf("%s\n", arr);
 
	return 0;
}

運(yùn)行結(jié)果:

以上就是C語言左旋字符串的三種實(shí)現(xiàn)方式的詳細(xì)內(nèi)容,更多關(guān)于C語言左旋字符串的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實(shí)現(xiàn)彩色飛機(jī)大戰(zhàn)

    C++實(shí)現(xiàn)彩色飛機(jī)大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)彩色飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 基于Qml實(shí)現(xiàn)水印工具

    基于Qml實(shí)現(xiàn)水印工具

    這篇文章主要介紹了如何在?Qml?中實(shí)現(xiàn)一個簡單但功能強(qiáng)大的水印工具,包括水印文本的透明度、顏色、字體大小、旋轉(zhuǎn)角度等自定義功能,需要的可以參考下
    2024-12-12
  • C語言并查集的非遞歸實(shí)現(xiàn)詳解

    C語言并查集的非遞歸實(shí)現(xiàn)詳解

    以下是對C語言并查集的遞歸實(shí)現(xiàn)與非遞歸實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望能夠給你帶來幫助
    2021-09-09
  • C++構(gòu)造函數(shù)初始化列表的實(shí)現(xiàn)詳解

    C++構(gòu)造函數(shù)初始化列表的實(shí)現(xiàn)詳解

    構(gòu)造函數(shù)主要作用在于創(chuàng)建對象時為對象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動調(diào)用,無須手動調(diào)用;析構(gòu)函數(shù)主要作用在于對象銷毀前系統(tǒng)自動調(diào)用,執(zhí)行一 些清理工作
    2022-09-09
  • 利用C語言實(shí)現(xiàn)猜數(shù)字小游戲

    利用C語言實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了利用C語言實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C/C++?活動預(yù)處理器詳解

    C/C++?活動預(yù)處理器詳解

    預(yù)處理器是一些指令,指示編譯器在實(shí)際編譯之前所需完成的預(yù)處理,預(yù)處理的作用就是在代碼被編譯前對代碼做某些替換,這篇文章主要介紹了C/C++?活動預(yù)處理器,需要的朋友可以參考下
    2022-11-11
  • C++ MD5的源碼實(shí)例詳解

    C++ MD5的源碼實(shí)例詳解

    這篇文章主要介紹了C++ MD5的源碼實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C++學(xué)習(xí)筆記之初始化列表

    C++學(xué)習(xí)筆記之初始化列表

    初始化列表是類中構(gòu)造函數(shù)的一部分,用于實(shí)例化類中變量時賦初值,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)筆記之初始化列表的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Qt5實(shí)現(xiàn)文本編輯器(附詳細(xì)代碼)

    Qt5實(shí)現(xiàn)文本編輯器(附詳細(xì)代碼)

    QT是一個跨平臺的GUI開發(fā)框架,我使用的QT5 C++版本的,本文主要介紹了Qt5實(shí)現(xiàn)文本編輯器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 解決codeblocks致命錯誤:openssl/aes.h:沒有這樣的文件或目錄問題

    解決codeblocks致命錯誤:openssl/aes.h:沒有這樣的文件或目錄問題

    這篇文章主要介紹了解決codeblocks致命錯誤:openssl/aes.h:沒有這樣的文件或目錄問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06

最新評論

宝兴县| 元阳县| 三河市| 太康县| 商水县| 沙河市| 历史| 九寨沟县| 阜阳市| 唐海县| 贵州省| 阳原县| 遂川县| 瑞丽市| 麦盖提县| 龙川县| 五河县| 贺州市| 盐亭县| 新巴尔虎左旗| 丰顺县| 大埔区| 呼图壁县| 盘山县| 随州市| 永靖县| 集安市| 满城县| 九江市| 富裕县| 东海县| 顺义区| 墨竹工卡县| 马关县| 镇原县| 新平| 九台市| 景东| 青神县| 水城县| 密山市|