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

C/C++左旋字符串實現(xiàn)代碼舉例

 更新時間:2023年12月18日 11:17:03   作者:Zik----  
在C/C++語言中沒有專門的字符串變量,通常用字符數(shù)組來存放字符串,下面這篇文章主要給大家介紹了關于C/C++左旋字符串實現(xiàn)的相關資料,需要的朋友可以參考下

題目

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

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

設計循環(huán)使其可以旋1次,然后讓他執(zhí)行n次是一個最簡單的思路:

長度為5的情況下,旋轉6、11、16...次相當于1次,7、12、17...次相當于2次,以此類推。

void leftRound(char * src, int time)
{
	int i, j, tmp;
  int len = strlen(src);
  time %= len; 
	for (i = 0; i < time; i++) //執(zhí)行k次的單次平移
	{
		tmp = src[0];
		for(j = 0; j < len - 1; j++) //單次平移
		{
			src[j] = src[j + 1];
		}
		src[j] = tmp;
	}
}

改進一:

一次一次轉比較麻煩,我們可以選擇拼接法,一次到位:

void leftRound(char * src, int time)
{
	int len = strlen(src);
	int pos = time % len; //斷開位置的下標
	char tmp[256] = { 0 }; //更準確的話可以選擇malloc len + 1個字節(jié)的空間來做這個tmp
	
	strcpy(tmp, src + pos); //先將后面的全部拷過來
	strncat(tmp, src, pos); //然后將前面幾個接上
	strcpy(src, tmp); //最后拷回去
}

改進二:

這個方法要用到一個數(shù)組形成的輔助空間,讓人覺得有點不爽,還可以有更好的選擇,例如ABCDEFG,左旋3次后變成DEFGABC,有一個特殊的操作方式:

先將要左旋的前三個家伙逆序(CBADEFG),然后將后半段也逆序(CBAGFED),最后整體逆序(DEFGABC)即可。這樣只需要做數(shù)值交換即可,可以寫一個函數(shù)幫我們完成局部逆序,代碼如下:

void reverse_part(char *str, int start, int end) //將字符串從start到end這一段逆序
{
	int i, j;
	char tmp;

	for (i = start, j = end; i < j; i++, j--)
	{
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}
}

void leftRound(char * src, int time)
{
	int len = strlen(src);
	int pos = time % len;
	reverse_part(src, 0, pos - 1); //逆序前段
	reverse_part(src, pos, len - 1); //逆序后段
	reverse_part(src, 0, len - 1); //整體逆序
}

補充:右旋字符串

右旋字符串可以通過左旋字符串‘string.size()-k’步來實現(xiàn)。比如,對于字符串abcdefg和右旋2步,我們可以先計算需要左旋的步數(shù)為string.size()-2,然后再調(diào)用左旋函數(shù)即可。

以下為右旋字符串的C++實現(xiàn)代碼:

#include <iostream>
#include <string>

using namespace std;

// 翻轉字符串中[start, end]部分
void reverse(string& str, int start, int end) {
    while (start < end) {
        swap(str[start], str[end]);
        start++;
        end--;
    }    
}

// 字符串右旋k步
string rightRotateString(string str, int k) {
    int len = str.size();
    int left = len-k%len;   // 需要左旋的步數(shù)
    // 翻轉前l(fā)eft個字符和剩余字符
    reverse(str, 0, left-1);
    reverse(str, left, len-1);
    // 整個字符串翻轉
    reverse(str, 0, len-1);
    return str;
}

int main() {
    string str = "abcdefg";
    int k = 2;
    string res = rightRotateString(str, k);
    cout << "右旋 " << k << " 步后:" << res << endl;
    return 0;
}

在上述代碼中,我們定義了與左旋函數(shù)相同的翻轉函數(shù),并實現(xiàn)了字符串的右旋函數(shù)rightRotateString。在函數(shù)中,我們先計算需要左旋的步數(shù)為string.size()-k,然后調(diào)用左旋函數(shù)即可。具體來說,我們分別翻轉前l(fā)eft個字符和剩余字符,然后再翻轉整個字符串。最后,我們將結果返回。在主函數(shù)中,我們使用字符串abcdefg,并右旋2步,輸出結果為fgabcde。

總結 

到此這篇關于C/C++左旋字符串實現(xiàn)的文章就介紹到這了,更多相關C/C++左旋字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文帶你深入了解Qt中的順序容器類與關聯(lián)容器類

    一文帶你深入了解Qt中的順序容器類與關聯(lián)容器類

    Qt中也有很多容器類,他們在存取速度、內(nèi)存開銷等方面進行了優(yōu)化,使用起來更輕量級、更便捷,下面就跟隨小編一起來學習一下它們的具體使用吧
    2024-04-04
  • C語言實現(xiàn)英文單詞助手

    C語言實現(xiàn)英文單詞助手

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)單詞小助手,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言中的一維數(shù)組與二維數(shù)組的實現(xiàn)

    C語言中的一維數(shù)組與二維數(shù)組的實現(xiàn)

    數(shù)組可以幫我們巧妙解決生活中的問題,使我們的代碼簡潔,本文主要介紹了C語言中的一維數(shù)組與二維數(shù)組,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • DEV?C++源碼編譯后控制臺輸出中文亂碼問題解決

    DEV?C++源碼編譯后控制臺輸出中文亂碼問題解決

    本文主要介紹了DEV?C++源碼編譯后控制臺輸出中文亂碼問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 詳解C語言結構體中的函數(shù)指針

    詳解C語言結構體中的函數(shù)指針

    這篇文章主要介紹了詳解C語言結構體中的函數(shù)指針,文中對函數(shù)指針的基本概念也有講解,需要的朋友可以參考下
    2016-04-04
  • C++11/14 線程中使用Lambda函數(shù)的方法

    C++11/14 線程中使用Lambda函數(shù)的方法

    這篇文章主要介紹了C++11/14 線程中使用Lambda函數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • C語言之結構體定義 typedef struct 用法詳解和用法小結

    C語言之結構體定義 typedef struct 用法詳解和用法小結

    這篇文章主要介紹了C語言的結構體定義typedef struct用法詳解和用法小結,typedef是類型定義,typedef struct 是為了使用這個結構體方便,感興趣的同學可以參考閱讀
    2023-03-03
  • C語言數(shù)據(jù)結構之單向鏈表詳解分析

    C語言數(shù)據(jù)結構之單向鏈表詳解分析

    鏈表可以說是一種最為基礎的數(shù)據(jù)結構了,而單向鏈表更是基礎中的基礎。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護一組數(shù)據(jù)集合時,就可以使用鏈表,這一點和數(shù)組很相似
    2021-11-11
  • C語言利用模板實現(xiàn)簡單的棧類

    C語言利用模板實現(xiàn)簡單的棧類

    這篇文章主要為大家詳細介紹了C語言利用模板實現(xiàn)簡單的棧類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • C++記錄程序運行時間的四種方法

    C++記錄程序運行時間的四種方法

    在學習過程中很重要的一個必會的小技巧:計算某一段代碼的執(zhí)行時間,可以用來分析代碼的效率和算法的時間復雜度等等(個人主要是在總結各種排序算法時遇到的這個方法),本文給大家介紹了C++記錄程序運行時間的四種方法,需要的朋友可以參考下
    2025-03-03

最新評論

定南县| 雅安市| 尤溪县| 商水县| 焉耆| 利辛县| 青神县| 大安市| 宝应县| 岚皋县| 和田县| 黔西县| 漠河县| 中方县| 原平市| 阳春市| 万荣县| 潍坊市| 时尚| 阳新县| 朔州市| 宝应县| 鹿邑县| 珠海市| 镇远县| 措美县| 钦州市| 封丘县| 遂平县| 玉溪市| 交口县| 拉孜县| 寻甸| 云霄县| 厦门市| 满城县| 炎陵县| 伊金霍洛旗| 平和县| 长岭县| 武隆县|