字符的左旋
2017-11-06 22:14
197 查看
1. 实现一个函数,可以左旋字符串中的k个字符。
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
方法1:常规做法,将每个左移
#include "stdio.h"
void left_move(char *arr,
int len,
int count)
{
count %=
len;//有效的左旋次数
int i = 0;
while (count--)//左旋的次数
{
char tmp =
arr[0];//将第一个取出
for (i = 0; i <
len-1; i++)//左旋一次
{
arr[i] =
arr[i + 1];
}
arr[i] = tmp;//将取出的第一个放至最后
}
}
int main()
{
char arr[] =
"abcd";
int sz =
sizeof(arr)/sizeof(arr[0]);//大小为5
int count = 0;
printf("左旋之前:%s\n", arr);
printf("请输入左旋的字符个数:\n");
scanf_s("%d", &count);
left_move(arr, sz-1,count);
printf("左旋之后:%s\n", arr);
system("pause");
return 0;
}
方法2:部分逆序后再整体逆序
void reverse(char *start ,char*end)
{
while (start <
end)
{
*start ^= *end;
*end ^= *start;
*start ^= *end;
start++;
end--;
}
}
void left_move(char *arr,
int len,
int count)
{
count %=
len;//有效的左旋次数,假设左旋两次
reverse(arr,
arr + count-1);//逆置前半部分 ab -》 ba
reverse(arr +
count, arr +
len - 1);//逆置后半部分 cd-》dc
reverse(arr,
arr + len - 1);//整体逆置 ->cdab
}
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#include "stdio.h"
#include "assert.h"
#include "string.h"
int is_not(char *p,
char*q)
{
assert(p !=
NULL&&q !=
NULL);//传入指针不能为空
strcat(p,
p, strlen(p));//连接两个字符串的函数
if (strstr(p,
q) ==
NULL)//子字符串比较的函数
{
return -1;
}
else{
return 1;
}
}
int main()
{
int ret = 0;
char arr1[] =
"abcd";
char arr2[] =
"dabc";
ret = is_not(arr1, arr2);
if (ret == 1)
{
printf("是");
}
if (ret == -1)
{
printf("不是");
}
system("pause");
return 0;
}
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
方法1:常规做法,将每个左移
#include "stdio.h"
void left_move(char *arr,
int len,
int count)
{
count %=
len;//有效的左旋次数
int i = 0;
while (count--)//左旋的次数
{
char tmp =
arr[0];//将第一个取出
for (i = 0; i <
len-1; i++)//左旋一次
{
arr[i] =
arr[i + 1];
}
arr[i] = tmp;//将取出的第一个放至最后
}
}
int main()
{
char arr[] =
"abcd";
int sz =
sizeof(arr)/sizeof(arr[0]);//大小为5
int count = 0;
printf("左旋之前:%s\n", arr);
printf("请输入左旋的字符个数:\n");
scanf_s("%d", &count);
left_move(arr, sz-1,count);
printf("左旋之后:%s\n", arr);
system("pause");
return 0;
}
方法2:部分逆序后再整体逆序
void reverse(char *start ,char*end)
{
while (start <
end)
{
*start ^= *end;
*end ^= *start;
*start ^= *end;
start++;
end--;
}
}
void left_move(char *arr,
int len,
int count)
{
count %=
len;//有效的左旋次数,假设左旋两次
reverse(arr,
arr + count-1);//逆置前半部分 ab -》 ba
reverse(arr +
count, arr +
len - 1);//逆置后半部分 cd-》dc
reverse(arr,
arr + len - 1);//整体逆置 ->cdab
}
2.判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 = AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
#include "stdio.h"
#include "assert.h"
#include "string.h"
int is_not(char *p,
char*q)
{
assert(p !=
NULL&&q !=
NULL);//传入指针不能为空
strcat(p,
p, strlen(p));//连接两个字符串的函数
if (strstr(p,
q) ==
NULL)//子字符串比较的函数
{
return -1;
}
else{
return 1;
}
}
int main()
{
int ret = 0;
char arr1[] =
"abcd";
char arr2[] =
"dabc";
ret = is_not(arr1, arr2);
if (ret == 1)
{
printf("是");
}
if (ret == -1)
{
printf("不是");
}
system("pause");
return 0;
}
相关文章推荐
- 实现一个函数,可以左旋字符串中K个字符
- C语言:实现一个函数,可以左旋字符串中的k个字符。
- c::如何左旋一个字符串中的k个字符~
- 1.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA
- 实现一个函数,可以左旋字符串中的k个字符。
- 左旋字符
- 可以将一个字符串左旋K个字符(0<=k<=字符串长度)的三种函数写法【C语言】
- 实现一个函数,可以左旋字符串中的k个字符
- 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
- 实现一个函数,可以左旋字符串中的k个字符。
- 左旋字符
- 实现一个函数,可以左旋字符串中的k个字符。
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- C语言--左旋字符串中的K个字符
- 实现左旋字符串中前k个字符的多种方法(交换法、双倍字符串法、翻转)
- 【Ex.】实现一个函数,可以左旋字符串中的k个字符
- 左旋字符
- 【C语言】【笔试题】【面试题】实现一个函数,可以左旋字符串中的k个字符
- .实现一个函数,可以左旋字符串中的k个字符。
- 实现一个函数,可以左旋字符串中的k个字符