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

左旋轉字符串

編輯:C++入門知識

26.左旋轉字符串

題目:
定義字符串的左旋轉操作:把字符串前面的若干個字符移動到字符串的尾部。

如把字符串abcdef左旋轉2位得到字符串cdefab。請實現字符串左旋轉的函數。
要求時間對長度為n的字符串操作的復雜度為O(n),輔助內存為O(1)。

 

[cpp]  #include<iostream>  
#include<iomanip>  
using namespace std; 
 
void reverse(char *s,const int strl) 
// 以s為起始位置,長度為 strl   

    int i,j; 
    char tc; 
    for(i=0,j=strl-1/* 長度減一 */;i<j;i++,--j) 
     { 
        tc=s[i]; 
        s[i]=s[j]; 
        s[j]=tc; 
     } 

void  Lshift(char *s,int m) 

    const int slen=strlen(s); 
    reverse(s,m); 
    reverse(s+m,slen-m); 
    reverse(s,slen); 

 
int main() 
{    
    char s[]="abcdefghijklmn"; 
    Lshift(s,4); 
    cout<<s<<endl; 
    system("pause"); 
    return 0; 
    } 

#include<iostream>
#include<iomanip>
using namespace std;

void reverse(char *s,const int strl)
// 以s為起始位置,長度為 strl
{
    int i,j;
    char tc;
    for(i=0,j=strl-1/* 長度減一 */;i<j;i++,--j)
     {
        tc=s[i];
        s[i]=s[j];
        s[j]=tc;
     }
}
void  Lshift(char *s,int m)
{
    const int slen=strlen(s);
    reverse(s,m);
    reverse(s+m,slen-m);
    reverse(s,slen);
}

int main()
{  
    char s[]="abcdefghijklmn";
    Lshift(s,4);
    cout<<s<<endl;
    system("pause");
    return 0;
    }

分析:在Lshift函數中,調用三次reverse,前兩次將字符串分段分別翻轉,最後再整個翻轉一次,效果就是左旋m。

 

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