例如:abcdef左旋一个字符得到bcdefa,abcdef左旋两个字符得到cdbefab
注意将方法里面的字符串换成ABCD就可以达到题干的解。
第一种方法:
#include <stdio.h>
#include <string.h>
void leftRound(char* str, int k)
{
int len = strlen(str);
int time = k % len;
for (int i = 0; i < time; i++)
{
char tmp = str[0];
int j = 0;
for (j = 0; j < len - 1; j++)
{
str[j] = str[j + 1];
}
str[j] = tmp;
}
}
int main()
{
char str[] = "abcdef";
leftRound(str, 2);
printf("%s\n", str);
return 0;
}
第二种方法:
使用库函数strcpy和strcat
strcpy():字符串拷贝;
strcat():字符串拼接;----》strncat则表示拼接n个字符
例如:
#include <Stdio.h>
int main()
{
char str1[10] = { 0 };
char* str2 = "abcd";
strcpy(str1, str2);
printf("%s\n", str1);
printf("%s\n", str2);
return 0;
}
#include <Stdio.h>
int main()
{
char str1[100] = "abc";
char* str2 = "hello";
strcat(str1, str2);
printf("%s\n", str1);
char str3[100] = "def";
char* str4 = "hello";
strncat(str3, str4, 2);
printf("%s\n", str3);
return 0;
}
从这两种代码可以体会到strcpy和strcat以及strncat的用法;
第二种方法是:
//使用库函数左旋
#include <stdio.h>
#include <string.h>
void leftRound(char* str, int k)
{
int len = strlen(str);
int time = k % len;
char tmp[256] = { 0 };
strcpy(tmp, str + time);
strncat(tmp, str, time);
strcpy(str, tmp);
}
int main()
{
char str[] = "abcdef";
leftRound(str, 7);
printf("%s\n", str);
return 0;
}
第三种方法:三段逆置
1.先将A与B逆置
2再将C与D逆置
3.最后全逆置
#include <Stdio.h>
void Reverse(char* str, int start, int end)
{
int left = start;
int right = end;
while (left < right)
{
char tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
}
void leftRound(char* str, int k)
{
int len = strlen(str);
int time = k % len;
Reverse(str, 0, time - 1);
Reverse(str, time, len - 1);
Reverse(str, 0, len - 1);
}
int main()
{
char str[] = "abcdef";
leftRound(str, 7);
printf("%s\n", str);
return 0;
}