当前位置:网站首页>【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;
}
边栏推荐
- H3C V7版本交换机配置IRF
- 【LeetCode】Day96-第一个唯一字符&赎金信&字母异位词
- [happy Spring Festival] if you feel happy, dance
- wib3.0 跨越,在跨越(ง •̀_•́)ง
- H3C S5820V2_ Upgrade method after stacking IRF2 of 5830v2 switch
- 【论文代码】SML部分代码阅读
- Demander le Code de texte standard correspondant à un centre de travail dans l'ordre de production
- Embedded interview questions (IV. common algorithms)
- Migrate Infones to stm32
- Novice entry SCM must understand those things
猜你喜欢
The difference and usage between continue and break
Baidu online AI competition - image processing challenge: the 8th program of handwriting erasure
ArcGIS application foundation 4 thematic map making
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
Garbage collector with serial, throughput priority and response time priority
H3C防火墙RBM+VRRP 组网配置
SQLMAP使用教程(三)实战技巧二
Wib3.0 leapfrogging, in leapfrogging (ง • ̀_•́) ง
Yygh-11-timing statistics
华为路由器如何配置静态路由
随机推荐
Implementation of linked list in address book management system
初识数据库
功能安全之故障(fault),错误(error),失效(failure)
请求转发与重定向
多线程应用的测试与调试
[paper reading] nflowjs: synthetic negative data intensive anomaly detection based on robust learning
LAN communication process in the same network segment
(5) Explanation of yolo-v3 core source code (3)
The usage and difference between strlen and sizeof
IDEA 新UI使用
Detailed explanation of BF and KMP
Gtest之TEST宏的用法
如何在业务代码中使用 ThinkPHP5.1 封装的容器内反射方法
Sqlmap tutorial (III) practical skills II
Summary of data sets in intrusion detection field
Bit operation rules
Go language -- language constants
Function of contenttype
Construction of yolox based on paste framework
ContentType的作用