程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 字符串的旋轉,字符串旋轉

字符串的旋轉,字符串旋轉

編輯:關於C語言

字符串的旋轉,字符串旋轉


題目描述:給定一個字符串,要求將字符串前面的若干個字符移動到字符串的尾部。例如,將字符串"abcdef"的前3個字符'a'、'b'、'c'移動到字符串的尾部,那麼原字符串將變成"defabc"。請寫一個函數實現此功能。

  方法一:蠻力移位

定義指向字符串的指針s,設字符串長度為n,首先實現LeftShiftOne(char *s ,int n)將一個字符移動到字符串的最後,然後調用m次實現將m個字符移動到字符串末尾

參考代碼:

#include <bits/stdc++.h>

using namespace std;

void LeftShiftOne( char* s , int n )
{
    char t = s[0];
    for( int i = 1 ; i < n ; i++ )
    {
        s[i-1] = s[i];
    }
    s[n-1] = t;
}
void LeftRotateString( char* s , int n , int m )
{
    while( m-- )
    {
        LeftShiftOne( s , n );
    }
}

int main()
{
    char str[]="abcdef";
    cout<<str<<endl;
    LeftRotateString( str , 6 , 3 );
    cout<<str<<endl;
}

 

 

GCC運行結果:

  方法二:三步翻轉

拿上面的例子來說明:

(1)將原來的字符劃分為兩個部分A和B(劃分依據為所移動m個字符);

(2)將子字符串A和B進行翻轉操作;  分別為:"abc"--->"cba"  "def"--->"fed"

(3)最後將整體字符串進行翻轉操作,從而實現題目要求的字符串翻轉.  過程為: "cbafed"--->"defabc"

參考代碼:

#include <bits/stdc++.h>

using namespace std;

void ReverseString( char *s , int from , int to )
{
    while( from < to )
    {
        char t = s[from];
        s[from++] = s[to];
        s[to--] = t;
    }
}
void LeftRotateString( char *s , int n , int m )
{
    m%=n;
    ReverseString(s,0,m-1);
    ReverseString(s,m,n-1);
    ReverseString(s,0,n-1);
}
int main()
{
    char str[]="abcdef";
    cout<<str<<endl;
    LeftRotateString(str,6,3);
    cout<<str<<endl;
}

GCC運行結果:

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved