题目:字符串左旋
内容:实现一个函数,可以左旋字符串中的K个字符。
例如:
ABCDEF左旋一个字符可以得到BCDEFA
ABCDEF左旋两个字符可以得到CDEFAB
方法一:移动字符
#include <stdio.h>
#include <string.h>
char* left_round(char* str, int k)
{
int len = strlen(str);
int times = k % len;
for (int i = 0; i < times; i++)
{
char tmp = str[0];
int j = 0;
for (; j < len - 1; j++)
{
str[j] = str[j + 1];
}
str[j] = tmp;
}
return str;
}
int main()
{
char str[] = { "ABCDEF" };
int k = 0;
scanf("%d", &k);
left_round(str, k);
printf("%s", str);
return 0;
}
方法二:逆序字符串
//参考代码
#include <stdio.h>
#include <string.h>
void reverse(char* str, int strat, int end)
{
int i, j;
char tmp;
for (i = strat, j = end; i < j; i++, j--)
{
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
}
void left_round(char* str, int k)
{
int len = strlen(str);
int times = k % len;
reverse(str, 0, k - 1);//逆序前段字符
reverse(str, k, len - 1);//逆序后段字符
reverse(str, 0, len - 1);//逆序整体字符
}
int main()
{
char str[] = { "ABCDEF" };
int k = 0;
scanf("%d", &k);
left_round(str, k);
printf("%s", str);
return 0;
}
方法三:使用字符函数
#include <stdio.h>
#include <string.h>
void left_round(char* str, int k)
{
int len = strlen(str);
int times = k % len; //假设结果为3 可使用malloc len+1 来设置大小
char tmp[256]; //相当于一个空箱子
strcpy(tmp, str + times); //将ABCDEF 中的DEF拷贝进入tmp
strncat(tmp, str, times); //将ABCDEF 中的ABC附加在tmp后,times是限制个数
strcpy(str, tmp); //最后将tmp拷贝进入str
}
int main()
{
char str[] = { "ABCDEF" };
int k = 0;
scanf("%d", &k);
left_round(str, k);
printf("%s", str);
return 0;
}