輪換
串“abcd”每個字符都向右移位,最右的移動到第一個字符的位置,就變為“dabc”。這稱為對串進行位移=1的輪換。同理,“abcd”變為:“cdab”則稱為位移=2的輪換。
代碼如下:
1 #include <string.h>
2 #include <stdlib.h>
3 void shift(char* s, int n)
4 {
5 char* p;
6 char* q;
7 int len = strlen(s);
8 char* s2;
9 ?if(len==0) return;
10 if(n<=0 || n>=len) return;
11 s2= (char*)malloc(sizeof(char)*(len+1));
12 ? p = s;
13 q = s2 + n % len;
14 while(*p)
15 {
16 *q++ = *p++;
17 if(q-s2>=len)
18 {
19 *q = '\0';
20 q = s2;
21 }
22 ?}
23 strcpy(s,s2);
24 free(s2);
25 }
26 void main()
27 {
28 char str[10] = "zhanghe";
29 shift(str,2);
30 printf("%s\n",str);
31 }
請問11行為什么是len+1?
12行13行又是什么意思,p、q代表什么?
17行是什么意思?
uj5u.com熱心網友回復:
11行 是給字串s2動態申請空間,因為字串最后一位是'\0',所以要加1,不然會溢位12行 p代表的是需要移動的原字串的第一個字符
13行 q指向的是上次換輪的位置
17行 判斷是否移動最后一位
uj5u.com熱心網友回復:
這個11行看著很揪心,sizeof結果是無符號的,但len是有符號的;轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/148762.html
標籤:基礎類
