当前位置:网站首页>【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;
}
边栏推荐
- Summary of data sets in intrusion detection field
- Title 1093: character reverse order
- [Thesis code] SML part code reading
- [experience] when ultralso makes a startup disk, there is an error: the disk / image capacity is too small
- Yunxiaoduo software internal test distribution test platform description document
- 2022 software testing workflow to know
- Winter 2021 pat class B problem solution (C language)
- Station B, Master Liu Er - dataset and data loading
- YYGH-11-定时统计
- Leetcode 701 insertion operation in binary search tree -- recursive method and iterative method
猜你喜欢

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

Arrays and collections

Download, install and use NVM of node, and related use of node and NRM

Report on market depth analysis and future trend prediction of China's arsenic trioxide industry from 2022 to 2028

How to use the container reflection method encapsulated by thinkphp5.1 in business code

The difference and usage between continue and break

进程和线程

Construction of yolox based on paste framework

实践分享:如何安全快速地从 Centos迁移到openEuler

The usage and difference between strlen and sizeof
随机推荐
[untitled]
IDEA 新UI使用
Report on the competition status and investment decision recommendations of Guangxi hospital industry in China from 2022 to 2028
Investment strategy discussion and market scale prediction report of China's solid state high power amplifier industry from 2022 to 2028
How to recover Huawei router's forgotten password
H3C V7版本交换机配置IRF
Leetcode 701 insertion operation in binary search tree -- recursive method and iterative method
Station B Liu Erden linear regression pytoch
公司視頻加速播放
Download, install and use NVM of node, and related use of node and NRM
Commodity price visualization
Luogu p1460 [usaco2.1] healthy Holstein cows
AUTOSAR从入门到精通番外篇(十)-嵌入式S19文件解析
Software test interview questions - Test Type
Function of activation function
Jushan database appears again in the gold fair to jointly build a new era of digital economy
Embedded point test of app
Expose the serial fraudster Liu Qing in the currency circle, and default hundreds of millions of Cheng Laolai
误差的基本知识
[leetcode] day96 - the first unique character & ransom letter & letter ectopic word