1.实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void move_left(char*p, int num)
{
int i = 0;
for (i = 0; i<num; i++)//而这个循环做到实现移动位数,每循环一次说明字符左移1位
{
char temp = *p;
int j = 0;
while (*(p + j + 1))
{
*(p + j) = *(p + j + 1);//这里实现将每位字符向前移动,abcd会被改为bcda
j++;
}
*(p + j) = temp;
}
}
int main()
{
char arr[5] = "ABCD";
int i = 0;
printf("请输入你想移动的位数:");
scanf("%d", &i);
move_left(arr, i);
printf("这是移动后的字符数组:\n");
printf("%s", arr);
system("pause");
return 0;
}
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char* my_strncat(char *dest,char *stc,int len)
{ char *cp=dest;
while(*cp)
cp++;
while((*stc!='\0')&&(len--))
*cp++=*stc++;
*cp='\0';
return dest;
}
int main()
{
char arr[20]={0};
char str[10]={0};
char *ret;
printf("请输入要判断的两个字符串:\n");
gets(arr);
gets(str);
if(strlen(arr)==strlen(str))//判断两个字符串是否长度一样
{
my_strncat(arr,arr,strlen(arr));//两个相同的字符串合并
ret=strstr(arr,str);//strstr函数判断后面函数是不是前面函数的子字符串
if(ret!=NULL)
printf("yes!\n");
else printf("no!\n");
}
else printf("no!\n");
system("pause");
return 0;
}