其他筆試題:字符串的循環右移

編寫一個函數,實現將char型的字符串循環右移n個位置。比如,原來是"abcdefghi",如果n=2,則移位後將變爲"hiabcdefg"。

如下,實現了函數LoopMove,並編寫測試程序來驗證其正確性,在DevCpp中實現。

其算法複雜度爲O(n)。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cassert>
using namespace std;

void LoopMove(char *str,int n)
{
     assert(str != NULL);
     int len=strlen(str);
     int len_copy = len;
     n = n % len;
     int step = len - n;
     char p[len + 1];
     char *free = str;
     for(int i = 0;i < step;i++)
     {
        free++;
     }
     int p_index = 0;
     int q_index = 0;
     while(len_copy != 0)
     {
          while(*free != '\0')
          {
             p[p_index] = *free;
             p_index++;
             free++;
             len_copy--;
          }
          if(*free == '\0')
          {
               p[p_index] = str[q_index];
               p_index++;
               q_index++;
               len_copy--;
          }
     }
     p[len]='\0';
     //cout <<"p  " <<p << endl;
     strncpy(str,p,len);
     
}

int main()
{
    char str[]="abcdefghi";
    int n;
    cin >> n; 
    LoopMove(str,n);
    cout << str << endl;
    system("pause");
    return 0;
} 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章