实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
#include<stdio.h>
#include<Windows.h>
#pragma warning(disable:4996)
void turn(char s[], int n)
{
int len = strlen(s);
int i;
while (n--)
{
char temp = s[0]; //找一个中间变量存放第一个字符
for (i = 0; i < len - 1; i++)
{
s[i] = s[i + 1]; //将后面的数全部向前面移动一位
}
s[len - 1] = temp; //将第一个字符放在最后一个位置
}
}
int main()
{
int m;
scanf("%d", &m);
char str[] = "ABCD";
printf("左旋前:%s", str);
printf("\n");
turn(str,m );
printf("左旋后:%s", str);
printf("\n");
system("pause");
return 0;
}
第二种方法:采用指针的方法
#include<stdio.h>
#include<Windows.h>
#include<assert.h>
#pragma warning(disable:4996)
void turn(char *s, int n)
{
char temp = 0;
char *str = s;
assert(s);
while (n--)
{
temp = *s; 找一个中间变量存放第一个字符
str = s;
while (*(str + 1) != '\0')
{
*str = *(str + 1); //将后面的数全部向前面移动一位
str++;
}
*str = temp; //将第一个字符放在最后一个位置
}
}
int main()
{
int m;
scanf("%d", &m);
char str[] = "ABCD";
printf("左旋前:%s", str);
turn(str, m);
printf("左旋后:%s", str);
system("pause");
return 0;
}