各位老铁们,今日分享一个博客——如何用多种方法来实现字符串的旋转

可别不在意哟,这可是面试经典题之一!!!

 把字符串 "abcd" 经过3次旋转后实现  "dabc"

                     法一:一个一个旋转

                              法二:借助库函数

                                               法三:局部旋转

第一种方法也是我们大家最常想到的方法:一个一个旋转

abc
d

 

我们以此类推即可,第5 次旋转结果和第一次的一样,所以我们可以把旋转次数 的代码这样写

                int len = strlen(str);
                int time = k % len;                //求字符串旋转次数
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> void
LeftRound2(char* str, int k) { // 普遍的写法:一个一个旋转 int len = strlen(str); int time
= k % len; //求字符串旋转次数 for (int i = 0; i < time; i++) { int tmp = str[0]; int j
= 0; for (; j < len-1 ; j++) { str[j] = str[j + 1]; } str[j] = tmp; } } int
main() { /* 实现字符串的旋转 思路: 旋转的次数 怎么挪动字符 */ char str[] = "abcd"; //
只能用字符串来初始化字符串数组 不能写成 char* str = "abbcd"; LeftRound2(str, 3); printf("%s\n",
str); return 0; }
 第二种方法:借助库函数

思路:先求出需要旋转的次数==》借助临时数组来存放字符串==》需要用到函数:strcpy():字符串拷贝    strncat()  字符串追加

进行3次左旋转

借助strcpy() 把 剩余的字符串拷贝到临时数组中

    char tmp[256] = { 0 };
    strcpy(tmp,str+time);

借助strncat() 把 "abc" 追加到d 的后面即可

 strncat(tmp, str, time);

最后再把临时数组里面内容拷贝到原来数组str

#include<stdio.h> #include<string.h> void LeftRound1(char* str, int k) { /*
借助库函数 strcpy:字符串拷贝 strncat :字符串追加 */ int len = strlen(str); int time = k % len;
//求字符串旋转次数 //借助一个临时数组存放旋转后的字符串,之后再拷贝到str char tmp[256] = { 0 };
strcpy(tmp,str+time); strncat(tmp, str, time); strcpy(str, tmp); } int main() {
/* 实现字符串的旋转 思路: 旋转的次数 怎么挪动字符 */ /* 借助库函数 strcpy:字符串拷贝 strncat :字符串追加 */ char
str[] = "abcd"; // 只能用字符串来初始化字符串数组 不能写成 char* str = "abbcd"; LeftRound1(str,
3); printf("%s\n", str); return 0; }
 第3种方法:

核心在于:数组的逆置,下标位置的确定

void Reverse(char* str, int left, int right) { // 逆置数组 while (left < right) {
int tmp = *(str + left); *(str + left) = *(str + right); *(str + right) = tmp;
left++; right--; } } void LeftRound3(char* str, int k) { // 局部旋转 只需进行翻转3次即可
//逆置数组 确定下标位置 int len = strlen(str); int time = k % len; //求字符串旋转次数
Reverse(str,0,k - 1); Reverse(str, k,len-1); Reverse(str, 0, len - 1); } int
main() { /* 实现字符串的旋转 思路: 旋转的次数 怎么挪动字符 */ char str[] = "abcd"; //
只能用字符串来初始化字符串数组 不能写成 char* str = "abbcd"; LeftRound3(str, 3); printf("%s\n",
str); return 0; }
以上代码运行结果:

ok~~~以上就是我要为大家share 的内容,各位老铁们要是感觉还不错的话,咱一波赞走起!!!

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信