C語言中關於字串左右迴圈移位的問題

2021-09-30 08:44:39 字數 2528 閱讀 4767

我們在c語言中常常碰到字串迴圈左右移位的題型,下面對其進行詳解:

例如:有一組char的字串:abcdefghijk 。你要迴圈左移3位變成ijkabcdefgh(也有寫出ijkabcdefghi);或右移三位變成defghijkabc(也有寫成cdefghijkabc);

首先我們來解決字串迴圈右移的問題:

方法一:利用已有的字串函式。

#include

#include

void rightloop(char *a, int n);

main()

void rightloop(char *a, int n)

方法二:就是用簡單的c語句;

#include

void rightloop(char , int )

main()

void rightloop(char a[ ], int n)

//這裡用i來計算陣列a中字串的大小;//

while(a[n]!='/0')

//這裡是把不需要迴圈右移的字串賦值到陣列b中;b[ ]="defghijk"。//

while(a[k]!='/0')

//因為上乙個while迴圈中,陣列b已經賦值到b[j]了。所以這裡直接從b[j]開始把陣列a中的字串全部賦值到陣列b[j]以後的空間中;b [ ]="defghijkabcdefghijk";//

b[i]='/0';      //通過用陣列a中字串的長度i來調整陣列b的長度,刪去陣列b中多餘的字串 ,b="defghijklabc"。

for(i=0;b[i]!='/0';i++)

//把陣列b中調整好的字串重新賦給陣列a。//

}

再次我們來解決字串迴圈左移的問題

方法一:呼叫已經有的字串函式。

#include

#include

void leftloop(char *a, int n);

main()

void leftloop(char*a,int n)

方法二:就是用簡單的c語句;

#include

void leftloop(char , int )

main()

void leftloop(char a[ ], int n)

//這裡用i來計算陣列a中字串的大小;//

k=m=i-n;          //計算出前面有多少個字元不用移動//

while(a[k]!='/0')

//因為這時k=i-m,a[k]表示需要迴圈移動的第乙個字元,這裡是把需要迴圈右移的字串賦值到陣列b中;b[ ]="ijk"。//

b[j]='/0';

m--;k--;     //因為要用m調節下面的迴圈但是要從0開始所以比實際的多了一次;k--是為了要留著陣列a中的結束符,不出現亂碼;//

while(m>=0)

// 原來a[k]=「abcdefghijk",a[m]="abcdefgh",賦值之後a[k]="abcabcdefgh";//

for(i=0;b[i]!='/0';i++)

//把陣列b中調整好的字串重新賦給陣列a。b[i]="ijk";a[i]="abcabcdefgh"。賦值之後a[i]="j//

}

C語言中關於字串左右迴圈移位的問題

今天再看面試題時 出現了乙個字串左右移動迴圈的問題,看了一遍還沒有弄懂,就發了點時間來看了一下字元陣列與字元指標的問題,最終還是得到解決,呵呵,只要肯發功夫,還是會有收穫的 例如 有一組char的字串 abcdefghijk 你要迴圈左移3位變成ijkabcdefgh 也有寫出ijkabcdefgh...

C語言 字串右迴圈移位

請實現字串右迴圈移位函式,比如 abcdefghi 迴圈右移2位就是 hiabcdefg 函式原型 void rightloopmove char pstr,unsignedshort steps 函式引數說明 pstr point to a 0 terminated string steps th...

字串迴圈移位

把字串移動n位。可以乙個乙個移動,這樣的話,要移動n次,每次移動len個。演算法時間複雜度為o n len 也可以開闢乙個新的記憶體,把移動的最終位置計算出來,直接放到那裡即可,這樣時間負責度為o 1 空間複雜度為o len 除此之外,還有時間負責度為o 1 空間負責度也為o 1 的演算法。第一種方...