当前位置:网站首页>【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;
}
边栏推荐
- Migrate Infones to stm32
- Embedded point test of app
- Li Chuang EDA learning notes 12: common PCB board layout constraint principles
- What are the test sites for tunnel engineering?
- About PHP startup, mongodb cannot find the specified module
- Pay attention to the details of pytoch code, and it is easy to make mistakes
- 多线程应用的测试与调试
- 初识数据库
- Novice entry SCM must understand those things
- My 2021
猜你喜欢
[paper reading] nflowjs: synthetic negative data intensive anomaly detection based on robust learning
Station B Liu Erden softmx classifier and MNIST implementation -structure 9
ArcGIS application foundation 4 thematic map making
養了只小猫咪
[experience] install Visio on win11
Migrate Infones to stm32
Report on market depth analysis and future trend prediction of China's arsenic trioxide industry from 2022 to 2028
[happy Spring Festival] if you feel happy, dance
Yunxiaoduo software internal test distribution test platform description document
H3C V7版本交换机配置IRF
随机推荐
Redis6 cluster setup
Clock in during winter vacation
进程和线程
[Thesis code] SML part code reading
假设检验学习笔记
Report on the competition status and investment decision recommendations of Guangxi hospital industry in China from 2022 to 2028
【LeetCode】Day96-第一个唯一字符&赎金信&字母异位词
Database: ODBC remote access SQL Server2008 in oracel
Title 1093: character reverse order
How to use the container reflection method encapsulated by thinkphp5.1 in business code
H3C V7版本交换机配置IRF
华为BFD的配置规范
功能安全之故障(fault),错误(error),失效(failure)
Li Chuang EDA learning notes 12: common PCB board layout constraint principles
[leetcode] day96 - the first unique character & ransom letter & letter ectopic word
J'ai un chaton.
Detailed explanation of BF and KMP
Station B, Master Liu Er - dataset and data loading
HCIA复习
误差的基本知识