如arr[] = "abcd",k=2; arr[] = "cdab";
上代码:
思路:
1.创建两个数组,第一个数组是原来的存放字符的数组,第二个是用来存储旋转后的数组
2.新数组分两步存储,先存储k后的字符,再存储k(包括k)的字符
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void Swap(char* arr, char* ch, int n)
{
int i = 0;
char* p = &arr[n];//这个n就是题目的k,p指向第n+1个元素的地址
char* cp = arr;//此时的arr已经是首地址了
while (*p != NULL)
{
ch[i] = *p;
i++;
p++;
}//让新数组ch存储一部分
while (n--)
{
ch[i] = *cp;
cp++;
i++;
}//再存储剩下的部分
printf("%s", ch);
}
int main()
{
char arr[100] = { 0 };
int s = 0;
scanf("%d", &s);
getchar();//读走回车,避免影响输出
for (int i = 0; i < s; i++)
{
scanf("%c", &arr[i]);
}
getchar();//同上
int sz = strlen(arr);
int n = 0;
char ch[100] = { 0 };
scanf("%d", &n);
if (n > sz) {
n = n % sz;
}//判断n是否大于数组长度,避免越界
Swap(arr, ch, n);
return 0;
}
注意事项:
1.getchar的使用,没有getchar 回车键也会被当做输入的字符,那为什么以前有些题就不需要getchar呢,比如冒泡排序输入数组。因为此时的数组是字符数组,使用的是%c,回车键也是字符。而%d是识别不到回车键所有不用管
2.第7行 的arr已经是首地址,不能使用&arr。&arr需要使用二级指针