實現一個函數,可以左旋字符串中的k個字符 方法一:開辟另一個數組,先把第k+1後面的字符寫入這個數組中,再把要左旋的k個字符寫進去 實現如下: #include<stdio.h> #include<assert.h> #include<string.h> void left_Relvove(char *str,char *arr,int k) { char *pcur = str+k; //先讓指針從第k+1個字符開始,存進arr數組裡 assert (str && arr); //斷言 while(*pcur) //從第k+1個字符開始,遇到'\0'跳出 { *arr++ = *pcur++; } pcur = str; //把第k+1後面的字符寫到arr中後,把指針調向str首元素,開始寫入要旋轉的k個字符 while(k) { *arr++ = *pcur++; k--; } *arr='\0'; } int main() { int k; char str[10] = {0}; char arr[10] = {0}; scanf("%d", &k); scanf("%s",str); left_Relvove(str,arr,k); printf("%s\n",arr); return 0; } 方法二:定義一個字符串翻轉函數,把要左旋的k個字符先逆序翻轉,再把k+1後的字符 逆序翻轉,最後把整個字符串逆序翻轉 實現如下: #include<stdio.h> #include <string.h> void reserve(char *left,char*right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { char arr[10] = "AABCD"; int len = strlen(arr)-1; int k = 0; char *pstart = &arr[0]; char *pend = arr+len; scanf("%d", &k); reserve(pstart, pstart + k -1); //把要左旋的k個字符先逆序翻轉 reserve(pstart + k, pend); //把k+1後的字符逆序翻轉 reserve(pstart, pend); //整個字符串逆序翻轉 printf("%s\n", arr); system("pause"); return 0; }