实现一个函数,可以左旋字符串中的k个字符。
代码实现如下
#include<stdio.h>
#include<string.h>
void left_revolve(char ch[], int k)
{
int len = strlen(ch);
k %= len;
int i = 0;
//4.根据k值,重复123操作
for (i = 0; i < k; i++)
{
//1.创建临时变量存储首字符
char tmp = ch[0];
int j = 0;
//2.字符串整体向前移动一个字符的大小
for (j = 0; j < len - 1; j++)
{
ch[j] = ch[j + 1];
}
//3.将首字符存放到字符串末尾
ch[len - 1] = tmp;
}
}
int main()
{
char ch[] = "abcdef";
int k = 0;
printf("请输入需要旋转字符的个数>");
scanf("%d", &k);
left_revolve(ch, k);
printf("%s\n", ch);
return 0;
}
既然可以将前k个字符左旋之后置于字符串末尾,那么也可以得到->
先将前k个字符倒序,再将剩余字符倒叙,最后再将前后两部分倒序
代码实现如下
#include<stdio.h>
#include<assert.h>
#include<string.h>
void reverse(char* left, char* right)
{
assert(left && right);
while (left < right)
{
char tmp = *right;
*right = *left;
*left = tmp;
left++;
right--;
}
}
void left_revolve(char ch[], int k)
{
int len = strlen(ch);
k %= len;
//1.先逆序前k个字符
reverse(ch, ch + k - 1);
//2.再逆序剩余的字符
reverse(ch + k, ch + len - 1);
//3.最后逆序整个字符串
reverse(ch, ch + len - 1);
}
int main()
{
char ch[] = "abcdef";
int k = 0;
printf("请输入需要旋转字符的个数>");
scanf("%d", &k);
left_revolve(ch, k);
printf("%s\n", ch);
return 0;
}
更多推荐
字符串左旋
发布评论