各位老铁们,今日分享一个博客——如何用多种方法来实现字符串的旋转
可别不在意哟,这可是面试经典题之一!!!
把字符串 "abcd" 经过3次旋转后实现 "dabc"
法一:一个一个旋转
法二:借助库函数
法三:局部旋转
第一种方法也是我们大家最常想到的方法:一个一个旋转
| a | b | c |
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 的内容,各位老铁们要是感觉还不错的话,咱一波赞走起!!!

博客分享了用多种方法实现字符串旋转,这是面试经典题。以字符串“abcd”旋转3次得到“dabc”为例,介绍了一个一个旋转、借助库函数(如strcpy、strncat)、局部旋转三种方法,还给出了部分代码示例。

470





