1.实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
void left_mov(char s[], int k, int len)
{
k = k%len;
char *p = (char *)malloc((2 * len + 1)*sizeof(char));
strcpy(p, s);
strcat(p, s);
strncpy(s,p+k,len);
free(p);
}
//void Reverse(char*start, char*end)
//{
// while (start < end)
// {
// *start ^= *end;
// *end ^= *start;
// *start ^= *end;
// start++;
// end--;
// }
//}
//void left_mov(char str[], int left, int sz)
//{
// left = left%sz;
// Reverse(str, str + left - 1);
// Reverse(str + left, str + sz-1);
// Reverse(str, str + sz-1);
//}
//void left_mov(char str[], int left, int sz)
//{
// int i = 0;
// char tmp = str[0];
// left = left%sz;
// for (i = 0; i < left; i++)
// {
// int j = 0;
// for (j = 0; j < sz-1; j++)
// {
// str[j] = str[j + 1];
// }
// str[j] = tmp;
// }
//}
int main()
{
char str[] = { "ABCDEF" };
int left = 1;
int sz = sizeof(str) / sizeof(str[0]);
printf("左旋之前的字符串是:%s\n", str);
left_mov(str, left, sz);
printf("左旋之后的字符串是:%s\n", str);
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
#include<stdio.h>
#include<Windows.h>
int find_dest(char* src, char* dest)
{
int len = strlen(src);
char*tmp = (char*)malloc(2*len+1);
if (len == strlen(dest))
{
strcpy(tmp, src);
strcat(tmp, src);
if (strstr(tmp, dest) != NULL)
{
return 1;
}
}
free(tmp);
return 0;
}
int main()
{
int ret = 0;
char S1[] = { "ABCD" };
char S2 []= { "BCDA" };
ret = find_dest(S1, S2);
if (ret == 1)
printf("S2是由S1左旋得到的\n");
else
printf("S2不是由S1左旋得到的\n");
system("pause");
return 0;
}
3.栈帧的创建和销毁:
http://blog.csdn.net/Vickers_xiaowei/article/details/79512762
字符旋转
猜你喜欢
转载自blog.csdn.net/vickers_xiaowei/article/details/80300893
今日推荐
周排行