当前位置: 首页 > news >正文

C语言第四十二弹---使用多种方法实现字符串左旋转

使用多种方法实现字符串左旋转

一、 左移法

思路:每一次通过移动第一个字符,然后把后面的字符前移,然后再进行移动第一个字符再前移。故需要使用嵌套循环,外层循环控制移动第一个字符的次数,第二个循环进行字符前移

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>void left_move(char* arr, int k)
{	assert(arr);//断言引用头文件 <assert.h>int len = strlen(arr);//注意引头文件 <string.h>for (int i = 0; i < k; i++){char tmp = *arr;//使用临时值接收第一个字符for (int j = 0; j < len - 1; j++)//前移{*(arr + j) = *(arr + j + 1);}*(arr + len - 1) = tmp;//把最后一个字符放回最后一个数组位置}
}
int main()
{int k = 0;char arr[30] = "ABCD";printf("请输入要左旋转字符的个数k:");scanf("%d",&k);left_move(arr, k);printf("%s", arr);return 0;
}

二、分步逆序法

思路:先使用一个移动函数,把前k个字符反转,再移动k后面字符反转。最后整体反转。即数组ABCD k为2,1.BA->2.DC->3DCBA。

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>void reserve(char* left,char* right)//初始位置 旋转位置
{assert(left && right);while (left < right)//循环进行交换字符{char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}void left_move(char* arr, int k)
{int len = strlen(arr);reserve(arr,arr+k-1);reserve(arr+k, arr+len-1);reserve(arr,arr+len-1);
}int main()
{int k = 0;char arr[30] = "ABCD";printf("请输入要左旋转字符的个数k:");scanf("%d",&k);left_move(arr, k);printf("%s", arr);return 0;
}

三、函数法

思路:使用strncat把数组arr复制一份并放在arr数组中。通过循环直接获取对应位置字符串方法arr2即可。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <assert.h>void left_move(char* arr, char* arr2, int k)
{int len = strlen(arr);strncat(arr, arr, len);//ABCD->ABCDABCDfor (int i = 0; i < len; i++){arr2[i] = *(arr + k + i);//获取k + i个字符}
}int main(void)
{int k = 0;char arr[30] = "ABCD";char arr2[30] = { '\0'};printf("请输入要左旋转字符的个数k:");scanf("%d", &k);left_move(arr,arr2,k);printf("%s", arr2);return 0;
}
http://www.lryc.cn/news/251631.html

相关文章:

  • REST-Assured--JAVA REST服务自动化测试的Swiss Army Knife
  • docker中的网络不通问题
  • Android 12.0 修改Android系统的通知自动成组的数量
  • Debian12配置ssh服务器
  • 飞天使-elk搭建补充
  • YOLOv7+姿态估计Pose+tensort部署加速
  • Java数据结构 之 包装类简单认识泛类
  • 人工智能 - 人脸识别:发展历史、技术全解与实战
  • 多元排列熵 Multivariate Permutation Entropy
  • Windows安装MySQL8.2
  • Windows下安全认证机制
  • (学习笔记)Xposed模块编写(一)
  • SSM框架(五):Maven进阶
  • 【计算机视觉】基于OpenCV计算机视觉的摄像头测距技术设计与实现
  • Java项目实战《苍穹外卖》 四、Swagger接口文档
  • 深度学习——第03章 Python程序设计语言(3.1 Python语言基础)
  • 【人工智能Ⅰ】实验6:回归预测实验
  • 前端下载文件的方法-blob下载
  • zookeeper+kafka+ELK+filebeat集群
  • 【LangChain实战】开源模型学习(2)-ChatGLM3
  • Python编程技巧 – 迭代器(Iterator)
  • C语言练习题
  • 常见的AI安全风险(数据投毒、后门攻击、对抗样本攻击、模型窃取攻击等)
  • flutter开发实战-为ListView去除Android滑动波纹
  • 牛客在线编程(SQL大厂面试真题)
  • ubuntu下快速搭建docker环境训练yolov5数据集
  • SpringMVC常用注解和用法总结
  • webpack如何处理css
  • IELTS学习笔记_grammar_新东方
  • 【计算机组成原理】存储器知识