💡前言🌞:
大伙们好!😄又到了小陈每日一题的时间了~ 😋😋😋今天也带来了十分有趣的题目!🥰🥰🥰用C语言实现——~判断字符串旋转结果(附加字符串左旋详解),这个题目很有意思,新颖的同时又很值得思考!🤗为了讲明白这个题目,我将由浅入深,先从字符串左旋讲起,再讲字符串左旋的判断,我现在迫不及待地要和大家分享~!😄🤗🤗
💛字符串左旋题目💛
我们首先从字符串左旋讲起🥰,题目如下:
💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
💪 解题思路的分享💪
设计循环使其可以旋1次,然后让他执行n次是一个最简单的思路。
😊题目源码的分享😊
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> void LeftRound(char* a, int n) { int i,j,len = strlen(a); char tmp = a[0];//先储存首个元素,便于一会交换 for (i = 0; i < n; i++)//进行n次移位 { for (j = 0; j < len - 1; j++) { a[j] = a[j + 1];//单次的位移 } } a[j] = tmp;//将第一个元素与最后唯一没有移位的元素交换,完成一次移位。 } int main() { char a[] = { "abcdef" }; int n; scanf("%d", &n); LeftRound(a,n);//左移几个元素就写几 for (int i = 0;i < strlen(a); i++) { printf("%c ", a[i]); } return 0; }
💛判断字符串旋转结果题目💛
💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡💡
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。
例如:给定s1 =AABCD和s2 = BCDAA,返回1
给定s1=abcd和s2=ACBD,返回0.
AABCD左旋一个字符得到ABCDA
AABCD左旋两个字符得到BCDAA
AABCD右旋一个字符得到DAABC
💪 解题思路的分享💪
我们可以沿用上面的套路,只需再加上一个判断旋转后两数组是否相等的部分。
旋转的次数如何确定呢?我们可以用strlen函数求出字符串长度,将它的值作为旋转次数。
判断两字符串是否相等需要不能用==,我们需要用到strcmp函数,当返回值为1时,打印相等,否则打印不相等。
形参的类型定义成指针和数组皆可。
😊题目源码的分享😊
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<assert.h> int LeftRound(char* s1, char* s2, int n) { assert(s1 != NULL); assert(s2 != NULL); int i = 0, j, len = strlen(s1); for (j = 0; j < n; j++) { char tmp = s1[0]; for (i = 0; i < len - 1; i++) { s1[i] = s1[i + 1]; } s1[i] = tmp; if (strcmp(s1, s2) == 0) { return 1; } } return 0; } int main() { char s1[] = "AABCD", s2[] = "BCDAA"; int n; int len = strlen(s1); if (LeftRound(s1, s2, len)) { printf("是"); } else { printf("不是"); } return 0; }
也可以写成下面的形式。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<assert.h> int LeftRound(char* s1, char* s2, int n) { assert(s1 != NULL); assert(s2 != NULL); if (strcmp(s1, s2) == 0)//如果输入的字符串和原字符串相同就等于零 { return 1; } int len = strlen(s1); int i = 0; int j = 0; while (i < len)//旋转的次数进行n-1次 { char tmp = *s1; for (j = 0; j < len - 1; j++) { *(s1 + j) = *(s1 + j + 1); } *(s1 + len - 1) = tmp; //判断 if (strcmp(s1, s2) == 0) { return 1; } i++; } return 0; } int main() { char s1[] = "AABCD", s2[] = "BCDAA"; int n; int len = strlen(s1); if (LeftRound(s1, s2, len)) { printf("是"); } else { printf("不是"); } return 0; }
👉 本菜鸡&总结 👈
本篇文章旨在分享C语言详解【C语言每日一题】——判断字符串旋转结果(附加字符串左旋详解)。🤠希望我的文章能够让大家有所收获!😋😋😋大佬们如果对我的文章有什么建议,或者认为那里写的不好,请在评论区写下您宝贵的意见!😀如果觉得我写的不错的话还请点个赞和关注哦~我会持续输出编程的知识的!🌞🌞🌞