您的位置:首页 > 其它

位&翻转(2)

2018-03-07 21:05 141 查看
1。实现一个函数,可以左旋字符串中的k个字符

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)

void Inverse(char *x,char *y)
{
while(x<y)
{
*x^=*y;
*y^=*x;
*x^=*y;
x++;
y--;
}
}
void Left_Move1 (char *arr,int size,int count)
{
count %= size;
Inverse(arr,arr+count-1);
Inverse(arr+count,arr+size-1);
Inverse(arr,arr+size-1);
}
void Left_Move(char *arr,int size,int count)
{
int newSize = 2*size+1;
char *pStr = (char*)malloc(sizeof(char)*newSize);
count %= size;
strcpy(pStr,arr);
strcat(pStr,arr);
strncpy(arr,pStr+count,size);
free (pStr);

}
int main()
{
int count;
char arr[]="abcd1234";
int size;
scanf("%d",&count);
size = sizeof(arr)/sizeof(arr[0])-1;
//size = strlen(arr);
Left_Move (arr,size,count);
//Left_Move1 (arr,size,count);
printf("%s\n",arr);
return 0;
}


2。

判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable:4996)

int Find_isMove(char *arr,char *goal_arr)
{
int size = strlen(arr);
int goal_size = strlen(goal_arr);

int newSize = 2*size+1;
char *pStr = (char*)malloc(sizeof(char)*newSize);

if(size != goal_size)
{
return 0;
}

strcpy(pStr,arr);
strcat(pStr,arr);
if (strstr(pStr,goal_arr))
{
return 1;
}
return 0;
free (pStr);//申请的空间 需要释放 否则内存泄漏
}

int main()
{
char arr[]="1234abcd";
char goal_arr[]="4abcd123";
int res;
res=Find_isMove(arr,goal_arr);
if(res)
{
printf("is move\n");
}
else
{
printf("is not move\n");

}
return 0;
}


递归(题)

http://blog.csdn.net/romantic_c/article/details/78664881

宏(题)

http://blog.csdn.net/romantic_c/article/details/79451028

位&翻转_1(题)

http://blog.csdn.net/romantic_c/article/details/79455583
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  左旋 查找子串