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

c++將字符串循環左移n個位置

編輯:C++入門知識

C代碼 
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
 
/*********************** 最節約時間的方法 ************************/ 
/** 
 * @brief 將字符串向左旋轉n個位置 
 * @param      str  待旋轉的字符串 
 * @param[in]  mov  需要旋轉的數量 
 * @return 無 
 */ 
void move_string_left(char *str, int mov)  
{  
    if (NULL == str || mov <= 0)  
        return;  
    char tmp[mov];  
    int i;  
    int len = strlen(str);  
    if (len == 0)  
        return;  
    mov %= len;  
    printf("move %d times ", mov);  
    if (mov == 0)  
        return;  
    for (i = 0; i < sizeof tmp; i++)  
        tmp[i] = str[i];  
    tmp[i] = ;  
    for (i = 0; i < len-mov; i++)  
        str[i] = str[i+mov];  
    for (; i < len; i++)  
        str[i] = tmp[i-(len-mov)];  
}  
 
/** 
 * @brief 將字符串向右旋轉n個位置 
 * @param      str  待旋轉的字符串 
 * @param[in]  mov  需要旋轉的數量 
 * @return 無 
 */ 
void move_string_right(char *str, int mov)  
{  
    if (NULL == str || mov <= 0)  
        return;  
    char tmp[mov];  
    int i;  
    int len = strlen(str);  
    if (len == 0)  
        return;  
    mov %= len;  
    printf("move %d times ", mov);  
    if (mov == 0)  
        return;  
    for (i = len - mov; i < len; i++) {  
        tmp[i-(len-mov)] = str[i];  
    }  
    tmp[i-(len-mov)] = ;  
    for (i = len - 1; i >= mov; i--) {  
        str[i] = str[i-mov];  
        printf("str[%d] = str[%d] = %c ", i, i-mov, str[i-mov]);  
    }  
    for (; i >= 0; i--)  
        str[i] = tmp[i];  
}  
/*********************** 最節約時間的方法 ************************/ 
 
/*********************** 最節約空間的方法 ************************/ 
/** 
 * @brief 將字符串向左旋轉1個位置 
 * @param      str  待旋轉的字符串 
 * @param[in]  mov  需要旋轉的數量 
 * @return 無 
 */ 
void move_string_one_left(char *str)  
{  
    if (NULL == str)  
        return;  
    int  len = strlen(str);  
    int  i;  
    if (len == 0)  
        return;  
    char tmp = str[0];  
    for (i=0; i<len-1; i++) {  
        str[i] = str[i+1];  
    }  
    str[i] = tmp;  
}  
 
/** 
 * @brief 將字符串向右旋轉1個位置 
 * @param      str  待旋轉的字符串 
 * @param[in]  mov  需要旋轉的數量 
 * @return 無 
 */ 
void move_string_one_right(char *str)  
{  
    if (NULL == str)  
        return;  
    int  len = strlen(str);  
    if (len == 0)  
        return;  
    char tmp = str[len-1];  
    int  i;  
    for (i=len-1; i>0; i--) {  
        str[i] = str[i-1];  
    }  
    str[i] = tmp;  
}  
/*********************** 最節約空間的方法 ************************/ 
 
/*********************** 最節約空間和時間的方法 ************************/ 
/** 
 * @brief 返回數值i和j的最大公約數 
 * @return 正確返回最大公約數,參數有問題返回-1 
 */ 
int gcd(int i, int j)  
{  
    if (i<=0 || j<=0)  
        return -1;  
    while (i != j) {  
        if (i > j)  
            i -= j;  
        else 
            j -= i;  
    }  
    return i;  
}  
 
/** 
 * @brief 將字符串向左旋轉n個位置 
 * @param      str  待旋轉的字符串 
 * @param[in]  mov  需要旋轉的數量 
 * @return 無 
 */ 
void move_string_fast_left(char *str, int mov)  
{  
    if (NULL == str || mov <= 0)  
        return;  
    int len = strlen(str);  
    char tmp;  
    if (!mov)  
        return;  
    mov %= len;  
    if (!mov)  
        return;  
    int i, j, k;  
    int g_cd = gcd(mov, len);  
    for (i=0; i<g_cd; i++) {  
        tmp = str[i];  
        j = i;  
        while (1) {  
            k = j + mov;  
            if (k >= len)  
                k -= len;&

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