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

2022-08-02 02:57:09 字數 2642 閱讀 1323

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

例如:有一組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語言中關於字串左右迴圈移位的問題

我們在c語言中常常碰到字串迴圈左右移位的題型,下面對其進行詳解 例如 有一組char的字串 abcdefghijk 你要迴圈左移3位變成ijkabcdefgh 也有寫出ijkabcdefghi 或右移三位變成defghijkabc 也有寫成cdefghijkabc 首先我們來解決字串迴圈右移的問題 ...

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 的演算法。第一種方...