方法一:创建一个循环可以左移一个字符,需要左移几个字符就做几次循环即可
void leftround(char arr1[], int sz, int a)
{
int i = 0;
int ret = 0;
a %= sz;//如果旋转的次数大于所需要旋转的字符串,我们可以除以字符串的长度,得余数,例如
输入的a=7,超过了字符串“ABCD”,只需要求7%4的余数即可
for (i = 0; i < a; i++)
{//循环执行一次即可左移一个字符
int j = 0;
char tmp = arr1[0];//将字符串的首字符存储起来
while (j < sz - 1)
{
arr1[j] = arr1[j + 1];//将字符串的第二个字符存储到字符串的第一个位置
j++;
}
arr1[sz - 1] = tmp;//将第一个字符赋值给字符串的最后,就完成了一个字符串的左移
}
}
int main()
{
int a = 0;
scanf("%d", &a);//输入需要旋转几个字符
int sum = 0;
char arr1[] = "ABCD";
int sz = strlen(arr1);//求字符串长度
leftround(arr1, sz, a);
printf("%s", arr1);
}
方法二:创建一个数组,将不需要转移的拷贝的存放在前面,需要左移的存放在后边
#include<stdio.h>
#include<string.h>
void leftround(char *arr1, int sz, int a)
{
int b = a%sz; //断开位置的下标 例如a=2,“AB”即为左移的字符,“CD”为断开的位置
char tmp[256] = { 0 };//创建一个数组
strcpy(tmp, arr1 + b);//arr+b为所拷贝的对象,tmp是要拷贝到的地方。这里是将“CD”拷贝到tmp
strncat(tmp, arr1, b);//将“AB”拷贝到“CD”的后面
strcpy(arr1, tmp);//将tmp里的“CDAB”重新放回arr1,就实现了字符串的左移
}
int main()
{
int a = 0;
scanf("%d", &a);
int sum = 0;
char arr1[] = "ABCD";
int sz = strlen(arr1);
leftround(arr1, sz, a);
printf("%s", arr1);
}
strcpy函数:用于对字符串进行复制(拷贝)。
char* strcpy(char* strDestination, const char* strSource);
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[50] = { 0 };
char arr2[] = "abcdef";
strcpy(arr1, arr2);
printf("%s\n", arr1);
}
strncat函数: 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止。
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[50] = "ab";
char arr2[50] = "cdef";
int sz=strlen(arr2);
strncat(arr1, arr2,sz);
printf("%s\n", arr1);
}
方法三:先将要左旋的前二个家伙逆序(BACD),然后将后半段也逆序(BADC),最后整体逆序(CDAB)即可
#include<stdio.h>
#include<string.h>
void reverse_part(char *str,int start,int end)
{
int i, j;
char tmp;
for (i = start, j = end; i < j; i++, j--)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
void left_round(char *arr1,int sz, int a)
{
int b = a%sz;//断开位置的下标
reverse_part(arr1, 0, b - 1);//逆序函数,将需要左旋的逆序
reverse_part(arr1, b, sz-1);//将不需要左旋的逆序
reverse_part(arr1, 0, sz-1);//整体逆序
}
int main()
{
int a = 0;
scanf("%d", &a);
int sum = 0;
char arr1[] = "abcd";
int sz = strlen(arr1);
left_round(arr1, sz, a);
printf("%s", arr1);
}