左旋字符串三大法
法1
一次次去左转,暴力旋转法
int main()
{
char arr[] = "abcdef";
int k = 0;
scanf("%d", &k);
int n = k % 4;
int i = 0;
char tmp = 0;
int j = 0;
int len = strlen(arr);
for (i = 0; i < n; i++)
{
tmp = arr[0];
for (j = 0; j < len - 1; j++)
{
arr[j] = arr[j + 1];
}
arr[j] = tmp;
}
printf("%s", arr);
return 0;
}
法2
巧用字符串函数法 (但需要额外的一个数组)
- 对字符串函数不了解的可以去看,我的这一篇博客,各种字符串的讲解与实现,解释的十分详细
int main()
{
char arr[] = "abcdef";
int k = 0;
scanf("%d", &k);
int n = k %= 4;
int len = strlen(arr);
char* p = (char*)malloc(len + 1);
if (p == NULL)
{
perror("malloc ");
return 1;
}
strcpy(p, arr + n);
strncat(p, arr, n);
strcpy(arr, p);
printf("%s", arr);
free(p);
p = NULL;
return 0;
}
法3
分成两部分,先逆序前半部分,再逆序后半部分,最后整体逆序
void reverse(char* arr, int start, int end)
{
while (start < end)
{
char tmp = 0;
tmp = arr[start];
arr[start] = arr[end];
arr[end] = tmp;
start++;
end--;
}
}
int main()
{
char arr[] = "abcdef";
int start = 0;
int len = 0;
len = strlen(arr);
int k = 0;
int end = 0;
scanf("%d", &k);
k %= len;
reverse(arr, start, k - 1);
reverse(arr, k, len - 1);
reverse(arr, start, len - 1);
printf("%s", arr);
return 0;
}