今天再看面試題時 出現了乙個字串左右移動迴圈的問題,看了一遍還沒有弄懂,就發了點時間來看了一下字元陣列與字元指標的問題,最終還是得到解決,呵呵,只要肯發功夫,還是會有收穫的
例如:有一組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 的演算法。第一種方...