编程艺术C代码学习注释

一、左旋转字符串

详情见文章参考:

  • github:程序员编程艺术
  • csdn:程序员编程艺术第一章

1.暴力移位

void leftShift1(char * arr, int n)    //n位移动的位数
{size_t tmpLen = strlen(arr);char tmpChar;int i, j;if (n >= 0){for (i = 0; i < n; i++){tmpChar = *arr;         //tmpchar放入这一轮需要移动的字符for (j = 0; j < tmpLen - 1; j++){*(arr + j) = *(arr + j + 1);// 除了第一个字符依次向前移位}*(arr + tmpLen - 1) = tmpChar;}}else{for (i = 0; i < -n; i++)        //n为负数反向移动{tmpChar = *(arr + tmpLen - 1);for (j = tmpLen - 1; j > 0; j--){*(arr + j) = *(arr + j - 1);}*arr = tmpChar;}}
}

另一种实现方式:

//两个函数实现,一次执行函数移动一个字符。m必须为正数
void leftshiftone(char *s,int n) {  char t = s[0];    //保存第一个字符  for (int i = 1; i < n; ++i) {  s[i - 1] = s[i];  }  s[n - 1] = t;  
}  
void leftshift(char *s,int n,int m) {  while (m--) {  leftshiftone(s, n);  }  
}  

2.指针移位

每三个字符进行移动

void leftShift2(char * arr, int len, int n)
{int i;size_t tmpLen = len;int p0 = 0;int p1 = n;char tmpChar;/*  O(m - n - k)  k is the last section*/while (p1 + n - 1 < tmpLen)      //{tmpChar = *(arr + p0);*(arr + p0) = *(arr + p1);*(arr + p1) = tmpChar;p0++;p1++;}/**  not good O(k * (n + k)) k = tmpLen - p1for(i = 0;i < tmpLen - p1;i++){ //移动后面剩下的tmpChar = *(arr + tmpLen - 1);for(j = tmpLen - 1;j > p0;j--){*(arr + j) = *(arr + j -1);}*(arr + p0) = tmpChar;}*//* good O(k * n) */while (p1 < tmpLen){tmpChar = *(arr + p1);for (i = p1; i > p0; i--){*(arr + i) = *(arr + i - 1);}*(arr + p0) = tmpChar;p0++;p1++;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postman使用-03发送请求

文章目录 请求1.新建请求2.选择请求方式3.填写请求URL4.填写请求参数get请求参数在params中填写&#xff08;填完后在url中会自动显示&#xff09;post请求参数在body中填写&#xff0c;根据接口文档请求头里面的content-type选择body中的数据类型post请求参数为json-选择raw-选…

Flask 与微信小程序对接

Flask 与微信小程序的对接 在 web/controllers/api中增建py文件&#xff0c;主要是给微信小程序使用的。 web/controllers/init.py # -*- coding: utf-8 -*- from flask import Blueprint route_api Blueprint( api_page,__name__ )route_api.route("/") def ind…

软件测试/测试开发丨Pytest测试用例生命周期管理-Fixture

1、Fixture 用法 Fixture 特点及优势 1&#xff64;命令灵活&#xff1a;对于 setup,teardown,可以不起这两个名字2&#xff64;数据共享&#xff1a;在 conftest.py 配置⾥写⽅法可以实现数据共享&#xff0c;不需要 import 导⼊。可以跨⽂件共享3&#xff64;scope 的层次及…

Linux内核中断

Linux内核中断 ARM里当按下按键的时候&#xff0c;他首先会执行汇编文件start.s里面的异常向量表里面的irq,在irq里面进行一些操作。 再跳转到C的do_irq(); 进行操作&#xff1a;1&#xff09;判断中断的序号&#xff1b;2&#xff09;处理中断&#xff1b;3&#xff09;清除中…

2024美赛数学建模思路A题B题C题D题E题F题思路汇总 选题分析

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间&#xff1a;北京时间2024年2月2日&#xff08;周五&#xff…

模型部署之——ONNX模型转RKNN

提示&#xff1a;这里可以添加学习目标 提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、加载Docker镜像二、转换脚本 一、加载Docker镜像 加载rknn官方提供的基于x86架构下模型转换的镜像文件&#xff0c;生成…

【JavaScript】new原理解析

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

视频人脸识别马赛克处理

文章目录 前言一、实现思路&#xff1f;二、Coding三、实现效果 前言 前面几篇文章我们尝试了使用opencv完成图像人脸识别以及识别后贴图或者打马赛克的方法。 偶尔我们也会有需求在视频中将人脸马赛克化&#xff0c;opencv也提供了相应的方法来实现这个功能。 一、实现思路&a…

贪心算法的运用

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种常用的算法思想&#xff0c;通常用来解决最优化问题。可以使用贪心算法来解决一些问题&#xff0c;例如找零钱、任务调度等。 以找零钱为例&#xff0c;简单介绍一下贪心算法的应用 假设有一堆不同面额的硬币&#xff…

netty源码:(40)ReplayingDecoder

ReplayingDecoder是ByteToMessageDecoder的子类&#xff0c;我们继承这个类时&#xff0c;也要实现decode方法&#xff0c;示例如下&#xff1a; package cn.edu.tju;import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handle…

Ubuntu20.04服务器使用教程(安装教程、常用命令、故障排查)持续更新中.....

安装教程&#xff08;系统、驱动、CUDA、CUDNN、Pytorch、Timeshift、ToDesk&#xff09; 制作U盘启动盘&#xff0c;并安装系统 在MSDN i tell you下载Ubuntu20.04 Desktop 版本&#xff0c;并使用Rufus制作UEFI启动盘&#xff0c;参考UEFI安装Ubuntu使用GPTUEFI模式安装&am…

【IoT网络层】STM32 + ESP8266 +MQTT + 阿里云物联网平台 |开源,附资料|

目标&#xff1a;实现STM32连接阿里云物联网平台发送数据同时接收数据&#xff0c;IOT studio界面显示数据。具体来说&#xff1a;使用ESP8266 ESP-01来连接网络&#xff0c;获取设备数据发送到阿里云物联网平台并显示且oled显示屏当前的设备数据&#xff0c;通过IOT studio界面…

centos 安装 配置 zsh

centos 编译安装 zsh 和 配置 oh-my-zsh 下载 wget https://jaist.dl.sourceforge.net/project/zsh/zsh/5.9/zsh-5.9.tar.xz依赖 yum install ncurses-devel安装zsh 执行&#xff1a; tar -xvf zsh-5.9.tar.xz cd zsh-5.9 ./configure --prefix/usr/local/zsh5.9 make &am…

Golang学习之路一三基本数据类型

Golang学习之路一三基本数据类型 基本数据类型 int8 是有符号类型&#xff0c;uint8 是无符号类型 go 语言中不同类型的数据不能相加&#xff0c;会编译错误 类型名称长度零值说明bool布尔类型1false值为 true 或 false, 不可以用数字代表byte字节型10uint8rune字符类型40专…

Linux文件和目录管理命令---- less 命令

less 是一个强大的命令行工具&#xff0c;用于在 Unix 和 Unix-like 系统中查看&#xff08;不编辑&#xff09;大文件的内容。与 more 命令类似&#xff0c;但提供更多的功能和灵活性。在本博客中&#xff0c;本文将深入探讨 less 的各种用法&#xff0c;并展示相应的控制台命…

OpenHarmony城市技术论坛武汉站:探索大模型时代的终端操作系统创新

2023年12月23日下午,OpenHarmony城市技术论坛(以下简称“技术论坛”)——第6期(武汉站)于华中科技大学梧桐语问学中心明德报告厅圆满举办。本次技术论坛聚焦“大模型时代的系统软件”,旨在探索AI大模型在终端操作系统领域的创新趋势和挑战。论坛从“终端操作系统十大技术挑战”…

Ndk编译hevc静态库

源码下载: https://hg.videolan.org/x265 然后执行以下脚本: #!/bin/bash# 设置NDK路径&#xff0c;根据你的实际安装路径修改 NDK_PATH/mnt/c/Users/Administrator/ubuntu_dev/ndk/android-ndk-r21e# 设置目标平台和ABI版本&#xff0c;可以根据实际情况修改 aarch64-linux-…

最适合学生用的台灯有哪些?分享高口碑的学生护眼台灯

台灯是我们日常比较实用的一盏桌面照明灯具&#xff0c;不管是休闲看书、学习、办公都会用得上。如果使用了一款光源不好的台灯&#xff0c;时间长了可能就会影响我们的眼睛健康&#xff0c;特别是孩子的眼睛&#xff0c;还没有发育完全&#xff0c;影响更大。因此孩子学习的台…

模式识别与机器学习-SVM(带软间隔的支持向量机)

SVM&#xff08;带软间隔的支持向量机&#xff09; 软间隔思想的由来软间隔的引入 谨以此博客作为复习期间的记录。 软间隔思想的由来 在上一篇博客中&#xff0c;回顾了线性可分的支持向量机,但在实际情况中&#xff0c;很少有完全线性可分的情况&#xff0c;大部分线性可分…

思考:怎样卖猪

© Conmajia, 2016 Miscellaneous 167.4 卖猪的思考 养猪的人通常不会等着猪猪长到最肥最大的时候才卖。他们通常会在某个时间提前卖掉还没长到最大的猪。虽然笨猪们这时还没有完全长大&#xff0c;但养猪人的利润却能达到最高。这是为什么呢&#xff1f;考虑到有些逆天跟…