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

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

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

題目:

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

例如:
ABCD左旋一個(gè)字符得到BCDA
ABCD左旋兩個(gè)字符得到CDAB

方法一:

我們畫個(gè)圖分析一下:

基本邏輯:

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

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

我們發(fā)現(xiàn),abcd 4個(gè)字符旋轉(zhuǎn) k = 4 個(gè)字符時(shí),數(shù)組就回到了本身數(shù)組 abcd 。這時(shí),我們可以這樣理解,雖然我們旋轉(zhuǎn)了4個(gè)字符,但我們實(shí)際上我們旋轉(zhuǎn)了0個(gè)字符;依次類推,旋轉(zhuǎn)5個(gè)字符,實(shí)際上旋轉(zhuǎn)了1個(gè)字符;接下去也是如此......接下來,我們再把字符長度加長,變成abcde 5個(gè)字符,旋轉(zhuǎn) k = 5 個(gè)字符時(shí),數(shù)組就回到了本身數(shù)組 abcde,后面的分析就跟4個(gè)字符分析是一樣的。然后,我們能夠得到這樣一個(gè)表達(dá)式 num(實(shí)際次數(shù)) = k % len(數(shù)組字符個(gè)數(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++)
	{
		//每次移動(dòng)一個(gè)
		char tmp = arr[0];
		int j = 0;
		for (j = 0; j < len - 1; j++)
		{
			//移動(dòng)數(shù)據(jù)
			arr[j] = arr[j + 1];
		}
		arr[j] = tmp;
	}
}
int main()
{
	char arr[] = "abcd";
	int k = 0;
	scanf("%d", &k);//輸入旋轉(zhuǎn)字符個(gè)數(shù)
	Turn_left(arr, k);
	printf("%s\n", arr);
 
	return 0;
}

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

方法二:

我們也可以畫個(gè)圖分析一下:

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

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

代碼實(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這個(gè)字符串的后面,拷貝num個(gè)
	strncat(tmp, arr, num);
 
	//最后將tmp整個(gè)數(shù)組元素復(fù)制到arr數(shù)組中
	strcpy(arr, tmp);
}
 
int main()
{
	char arr[] = "abcd";
	int k = 0;
	scanf("%d", &k);//輸入旋轉(zhuǎn)字符個(gè)數(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);
 
	//整個(gè)數(shù)組逆序
	Reverse(arr, 0, len - 1);
}
 
 
int main()
{
	char arr[] = "abcd";
	int k = 0;
	scanf("%d", &k);//輸入旋轉(zhuǎn)字符個(gè)數(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ì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 基于Qml實(shí)現(xiàn)水印工具

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

    這篇文章主要介紹了如何在?Qml?中實(shí)現(xiàn)一個(gè)簡單但功能強(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)建對象時(shí)為對象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無須手動(dòng)調(diào)用;析構(gòu)函數(shù)主要作用在于對象銷毀前系統(tǒng)自動(dòng)調(diào)用,執(zhí)行一 些清理工作
    2022-09-09
  • 利用C語言實(shí)現(xiàn)猜數(shù)字小游戲

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

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

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

    預(yù)處理器是一些指令,指示編譯器在實(shí)際編譯之前所需完成的預(yù)處理,預(yù)處理的作用就是在代碼被編譯前對代碼做某些替換,這篇文章主要介紹了C/C++?活動(dòng)預(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í)例化類中變量時(shí)賦初值,下面這篇文章主要給大家介紹了關(guān)于C++學(xué)習(xí)筆記之初始化列表的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • Qt5實(shí)現(xiàn)文本編輯器(附詳細(xì)代碼)

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

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

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

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

最新評論

茶陵县| 武隆县| 长子县| 疏勒县| 长乐市| 宣武区| 静安区| 梓潼县| 镇坪县| 丹东市| 齐齐哈尔市| 辽宁省| 衡南县| 册亨县| 通渭县| 梁平县| 永兴县| 井研县| 宜州市| 永登县| 子洲县| 河东区| 克什克腾旗| 富宁县| 甘泉县| 边坝县| 华阴市| 江口县| 栾川县| 宣城市| 民和| 马龙县| 聂拉木县| 千阳县| 阳东县| 南陵县| 青龙| 梧州市| 九江市| 宁河县| 通海县|