当前位置:网站首页>【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;
}
边栏推荐
- 【课程笔记】编译原理
- C language learning notes (mind map)
- [paper reading] nflowjs: synthetic negative data intensive anomaly detection based on robust learning
- continue和break的区别与用法
- Winter 2021 pat class B problem solution (C language)
- Migrate Infones to stm32
- 初识数据库
- Memory and stack related concepts
- Report on market depth analysis and future trend prediction of China's arsenic trioxide industry from 2022 to 2028
- The usage and difference between strlen and sizeof
猜你喜欢
Station B, Master Liu Er - back propagation
養了只小猫咪
H3C V7版本交换机配置IRF
Analysis report on development trends and investment planning of China's methanol industry from 2022 to 2028
Market development prospect and investment risk assessment report of China's humidity sensor industry from 2022 to 2028
MPLS test report
Embedded interview questions (IV. common algorithms)
Report on the competition status and investment decision recommendations of Guangxi hospital industry in China from 2022 to 2028
Memory and stack related concepts
c语言——冒泡排序
随机推荐
假设检验学习笔记
查詢生產訂單中某個(些)工作中心對應的標准文本碼
A master in the field of software architecture -- Reading Notes of the beauty of Architecture
[experience] install Visio on win11
公司视频加速播放
Buuctf-[[gwctf 2019] I have a database (xiaoyute detailed explanation)
Accélération de la lecture vidéo de l'entreprise
C language learning notes (mind map)
Auto. JS learning notes 17: basic listening events and UI simple click event operations
Zoom through the mouse wheel
(5) Explanation of yolo-v3 core source code (3)
查询生产订单中某个(些)工作中心对应的标准文本码
Seven imperceptible truths in software testing
HCIA复习
YYGH-11-定时统计
Commodity price visualization
[C language syntax] the difference between typedef struct and struct
Arrays and collections
Station B, Master Liu Er - dataset and data loading
Luogu p1460 [usaco2.1] healthy Holstein cows