当前位置:网站首页>【C语言】字符串左旋
【C语言】字符串左旋
2022-07-06 05:58:00 【SouLinya】
题目
实现一个函数,可以左旋字符串中的k个字符。
例如:
ABCD左旋一个字符得到BCDA
ABCD左旋两个字符得到CDAB
一、解法一:暴力求解法
#include<stdio.h>
#include<string.h>
void Swap_arr(char* arr, int k)
{
int len = strlen(arr);
int i = 0;
for (i = 0; i < k; i++)
{
//保留首元素地址
char temp = *arr;
int j = 0;
//字符前移
for (j = 0; j < len - 1; j++)
{
*(arr + j) = *(arr + j + 1);
}
//最后把结尾字符赋值成首元素
*(arr + len - 1) = temp;
}
}
int main()
{
char arr[] = "abcdef";
int k;
scanf("%d", &k);
Swap_arr(arr, k);
printf("%s", arr);
return 0;
}
二、解法二:三步翻转法
思路:
假设左旋两个字符
1.先逆序前面两个字符
bacdef
2.逆序后面四个字符
bafedc
3.逆序整体
cdefab
#include<stdio.h>
//字符串逆序函数
void reverse(char* left, char* right)
{
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
void Swap_arr(char* arr, int k)
{
//计算字符串长度
int len = strlen(arr);
//逆序前面.注意传的参数
reverse(arr, arr + k - 1);
//逆序后面
reverse(arr + k, arr + len - 1);
//逆序整体
reverse(arr, arr + len - 1);
}
int main()
{
char arr[] = "abcdef";
int k;
scanf("%d", &k);
Swap_arr(arr, k);
printf("%s\n", arr);
return 0;
}
三. 解法三:拼接法
思路:利用strcpy字符串拷贝函数和strncat字符串追加函数
ab cdef ab cdef
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
void Swap_arr(char* arr, int k)
{
assert(arr != NULL);
int len = strlen(arr);
//断开位置的下标
int pos = k % len;
//动态内存开辟空间:len+1的原因是字符串还有'\0'字符
char* p = (char*)malloc((len+1) * sizeof(char));
if (p == NULL)
{
printf("%s\n", strerror(errno));
}
else
{
//先拷贝后面的cdef
strcpy(p, arr + pos);
//再拷贝前面的ab
strncat(p, arr, pos);
//拷贝到源字符串当中
strcpy(arr, p);
}
}
int main()
{
char arr[] = "abcdef";
int k;
scanf("%d", &k);
Swap_arr(arr, k);
printf("%s\n", arr);
return 0;
}
边栏推荐
- 通讯录管理系统链表实现
- Linux regularly backs up MySQL database
- [experience] install Visio on win11
- H3C S5820V2_ Upgrade method after stacking IRF2 of 5830v2 switch
- 多线程应用的测试与调试
- [untitled]
- 2022 software testing workflow to know
- Classes and objects (I) detailed explanation of this pointer
- [email protected] raspberry pie
- Station B Liu Erden linear regression pytoch
猜你喜欢
Construction of yolox based on paste framework
Cannot build artifact 'test Web: War expanded' because it is included into a circular depend solution
进程和线程
[course notes] Compilation Principle
[paper reading] nflowjs: synthetic negative data intensive anomaly detection based on robust learning
Raised a kitten
[happy Spring Festival] if you feel happy, dance
Web service connector: Servlet
CoDeSys note 2: set coil and reset coil
Embedded point test of app
随机推荐
Cognitive introspection
[Baiwen smart home] first day of the course_ Learn Embedded and understand the development mode of bare metal and RTOS
Mysql database master-slave cluster construction
《卓有成效的管理者》读书笔记
[happy Spring Festival] if you feel happy, dance
华为BFD的配置规范
Request forwarding and redirection
A complete collection of necessary learning websites for office programmers
Clear floating mode
Li Chuang EDA learning notes 12: common PCB board layout constraint principles
华为路由器如何配置静态路由
单元测试的意义
IDEA 新UI使用
High quality coding tool clion
Yunxiaoduo software internal test distribution test platform description document
H3C V7 switch configuration IRF
[ram IP] introduction and experiment of ram IP core
IP day 16 VLAN MPLS configuration
Sqlmap tutorial (III) practical skills II
H3C firewall rbm+vrrp networking configuration