[C語言] 左旋字符串
實現一個函數,可以左旋字符串中的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;
}