字符串左旋问题
Posted 一朵花花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串左旋问题相关的知识,希望对你有一定的参考价值。
题目1
字符串左旋
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
思路分析
创建一个临时变量用来存放字符串的第一个字符,利用for循环遍历字符串,实现将后一位赋值给前一位,最后将第一个字符赋值给最后一个元素即可。
代码实现
//实现一个函数,可以左旋字符串中的k个字符。
void leftturn(char* str,int length,int k) {
//循环实现 字符左旋
for (int i = 0; i < k; i++) {
int n = 0;
//使用临时变量储存第一个字符
char tmp = str[0];
//遍历数组,实现将后一位赋值给前一位
for (int n = 0; n < length - 1; n++) {
str[n] = str[n + 1];
}
//实现第一字符赋值给最后一个元素
str[length-1] = tmp;
}
}
int main() {
char str[] = "abcd";
int length = strlen(str);
int k = 0;
printf("请输入左旋字符的个数:");
scanf("%d", &k);
printf("before:%s\\n", str);
leftturn(str,length,k);
printf("after:%s\\n", str);
system("pause");
return 0;
}
代码过程分析
题目2
字符串旋转结果
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:
给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
思路分析
这道题在上一道题的基础上,增加了字符串旋转结果的判断,可以创建一个判定函数Judge,循环调用左旋和右旋函数,来判定每次循环结果的字符串是不是和str相等,若是我们要找的find,则返回1即可~
代码实现
//左旋k个字符函数
void leftTurn(char* str,int length,int k) {
for (int i = 0; i < k; i++) {
int n = 0;
char tmp = str[0];
for (int n = 0; n < length - 1; n++) {
str[n] = str[n + 1];
}
str[length-1] = tmp;
}
}
//右旋k个字符函数
void rightTurn(char* str, int length, int k) {
for (int i = 0; i < k; i++) {
int n = 0;
char tmp = str[0];
for (int n = 0; n < length - 1; n++) {
str[n] = str[n + 1];
}
str[length - 1] = tmp;
}
}
//比较 两字符串是否符合要求
int judge(char* str, char* find) {
int length1 = strlen(str);
int length2 = strlen(find);
//两个字符串长度不同,直接返回0
if (length1 != length2) {
return 0;
}
//使用循环 调用 左旋右旋函数,得到每一次变化的结果
for (int i = 0; i < length1; i++) {
leftTurn(str, length1, i);
if (strcmp(str, find) == 0) {
return 1;
}
rightTurn(str, length1, i++);
if (strcmp(str, find) == 0) {
return 1;
}
}
return 0;
}
int main() {
char s1[] = "AABDC";
char s2[] = "BCDAA";
printf("%s\\n%s\\n", s1, s2);
int ret=judge(s1, s2);
printf("%d\\n", ret);
system("pause");
return 0;
}
补充说明
调用strcmp函数,需要包含头文件<string.h>
strcmp函数的原型是:int strcmp(const char * str1,const char * str2)
strcmp是比较两个字符串是否相等,此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续往下比对,直到字符不同或到达终止的空字符为止
返回值 | 表示 |
---|---|
<0 | 第一个不匹配的字符在str1中的值比在str2中的值低 |
0 | 两个字符串的内容相等 |
>0 | 第一个不匹配的字符在str1中的值大于在str2中的值 |
以上是关于字符串左旋问题的主要内容,如果未能解决你的问题,请参考以下文章