当前位置:网站首页>【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;
}
边栏推荐
- 如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法
- The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
- [Jiudu OJ 07] folding basket
- 通讯录管理系统链表实现
- Linux regularly backs up MySQL database
- 华为路由器忘记密码怎么恢复
- c语言——冒泡排序
- Station B, Mr. Liu Er - multiple logistic regression, structure 7
- 2022 software testing workflow to know
- Memory and stack related concepts
猜你喜欢

Leetcode 701 insertion operation in binary search tree -- recursive method and iterative method

进程和线程

CoDeSys note 2: set coil and reset coil

Practice sharing: how to safely and quickly migrate from CentOS to openeuler

Usage of test macro of GTEST

Sqlmap tutorial (III) practical skills II

初识数据库

养了只小猫咪

Raised a kitten

How Huawei routers configure static routes
随机推荐
[Baiwen smart home] first day of the course_ Learn Embedded and understand the development mode of bare metal and RTOS
Some easy-to-use tools make your essay style more elegant
H3C firewall rbm+vrrp networking configuration
网络协议模型
Migrate Infones to stm32
Linux regularly backs up MySQL database
Introduction to promql of # yyds dry goods inventory # Prometheus
continue和break的区别与用法
Detailed explanation of BF and KMP
How to recover Huawei router's forgotten password
误差的基本知识
Station B Liu Erden softmx classifier and MNIST implementation -structure 9
【课程笔记】编译原理
YYGH-11-定时统计
MIT6.s081-2020 Lab2 System Calls
Huawei BFD configuration specification
假设检验学习笔记
Clear floating mode
SQLMAP使用教程(三)实战技巧二
How Huawei routers configure static routes