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

九冶建设有限公司网站营销策划与推广

九冶建设有限公司网站,营销策划与推广,深圳企业网站建设费用明细,dota2海涛做的网站前言 有的时候#xff0c;这个系列专栏中的解法之间并无优劣#xff0c;只是给大家提供不同的解题思路 我决定将代码实现的过程写成注释#xff0c;方便大家直接找到对应的函数#xff0c;只有需要补充说明的知识才会单拿出来强调 这个系列的文章会更的比较慢#xff0…前言 有的时候这个系列专栏中的解法之间并无优劣只是给大家提供不同的解题思路 我决定将代码实现的过程写成注释方便大家直接找到对应的函数只有需要补充说明的知识才会单拿出来强调 这个系列的文章会更的比较慢因为多种解法的需要慢慢收集、整理 字符串左旋 实现一个函数可以左旋字符串中的k个字符。 例如 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 暴力求解法1数组传参 #includestdio.h #includestring.hvoid left_move(char arr[], int k) {int i 0;int len strlen(arr);for (i 0; i k; i){char tmp arr[0];int j 0;for (j 0; j len - 1; j){arr[j] arr[j 1];}arr[len - 1] tmp;} }int main() {int k 0;scanf(%d, k);char arr[] abcdef;printf(%s\n, arr);left_move(arr,k);printf(%s\n, arr);return 0; } 在此简单的解释一下先将前面的元素提取出来存在别的地方然后后面的元素向前移动一位再将前面的元素放在后面 通过循环即可实现 暴力求解法2指针传参 #includestdio.h #includestring.h #includeassert.h//函数主体应用场景void left_move(char *arr, int k) {assert(arr);//为了良好的代码风格前面在《实用调试技巧》中有提到过我们可以在函数体开头使用断言防止arr是空指针int i 0;for (i 0; i k; i)//旋转一个字符{int len strlen(arr);//求数组长度char* tmp arr;//存储第一个元素int j 0;for (j 0; j len - 1; j)//把后面的元素都向前移动一位{*(arr j) *(arr j 1);//因为此处会访问到j1所以如果jlen的话会出现数组越界的情况所以在for循环的判断那里要注意一下}*(arr len - 1) tmp;//将第一个元素存储到最后}}int main() {char arr[] abcdef;int k 0;scanf(%d, k);left_move(arr, k);//左旋函数printf(%s\n, arr);//输出结果return 0; }提示使用assert 使用assert可以改善我们的代码风格具体原因在我的另一篇文章中有详细说明感兴趣的朋友可以去看一看 三步翻转法 思路 先逆序前k个元素再逆序后面的元素最后再逆序整体 也就是同一个逆序函数要调用三次我们为了整洁就单独封装出一个reverse函数 需求 想要实现逆序就需要知道两端的地址 reverse函数 void reverse(char* left, char* right) {assert(left);//建议存在指针传参的时候就使用断言反正也不吃亏assert(right);while (leftright){char tmp *left;*left *right;*right tmp;left;right--;}}left_move函数 void left_move(char* arr, int k) {assert(arr);int len strlen(arr);assert(len);//判断k是否超出数组大小reverse(arr, arr k - 1);//逆序左边k个元素reverse(arr k, arr len - 1);//逆序右边的元素reverse(arr, arr len - 1);//逆序整体}代码 #includestdio.h #includestring.h #includeassert.hvoid reverse(char* left, char* right) {assert(left);assert(right);while (leftright){char tmp *left;*left *right;*right tmp;left;right--;}}void left_move(char* arr, int k) {assert(arr);int len strlen(arr);assert(len);reverse(arr, arr k - 1);//逆序左边k个元素reverse(arr k, arr len - 1);//逆序右边的元素reverse(arr, arr len - 1);//逆序整体}int main() {char arr[] abcdef;int k 0;scanf(%d, k);left_move(arr, k);//左旋函数printf(%s\n, arr);//输出结果return 0; }拓展 做一道类似的题帮助大家巩固 写一个函数判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如给定s1 AABCD和s2 BCDAA返回1 给定s1abcd和s2ACBD返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA AABCD右旋一个字符得到DAABC 解法一穷举列出所有可能 void reverse(char* left, char* right) {assert(left);assert(right);while (leftright){char tmp *left;*left *right;*right tmp;left;right--;}}int left_move(char* arr, int k) {assert(arr);int len strlen(arr);assert(len);reverse(arr, arr k - 1);//逆序左边k个元素reverse(arr k, arr len - 1);//逆序右边的元素reverse(arr, arr len - 1);//逆序整体}int is_left_move(char* s1, char* s2) {int len strlen(s1);//求字符串长度来判断有多少种可能性int i 0;for (i 0; i len; i){left_move(s1, 1);//左旋的每种可能int ret strcmp(s1, s2);//比较二者是否相等if (ret 0){return 1;}}return 0; }int main() {char arr1[] abcdef;//此处不能使用指针因为使用指针变量的话它就是常量是不能改变的char arr2[] cdefab;int ret is_left_move(arr1, arr2);//接收返回值来判断是否是if (ret 1){printf(yes\n);//是}else{printf(no\n);//不是}return 0; }解法二双倍数组 创建两个数组如果要对比的字符串是这个大的数组的子集那就符合要求不然就不符合要求 is_left_move函数的实现 int is_left_move(char* s1, char* s2) {int len2 strlen(s2);//分为两步//1.在str1字符串中再放一个str1字符串要确保str1足够大并且str1一定要确定数组大小不然在使用srtncat函数的时候会报错// strnact函数字符串操作函数int len1 strlen(s1);if (len1 ! len2){return 0;}strncat(s1, s2, len1);//2.判断str2指向的字符串是否是str1指向的字符串的子串类似子集//strstr:找子串的函数char* ret strstr(s1, s2);if (ret NULL){return 0;}else{return 1;}return 0; } 单独说明 此处单独说明三个比较重要的函数 stract与strnact strcat字符串操作函数需要包含头文件string.h 语法格式 stract(s1, s2);//把后者追加到前者的后面但是要注意自己追加自己是不能使用这个函数的程序会直接报错 简单的解释一下 我们创建两个数组分别存储abc\0和def\0 想要追加的话首先要找到第一个字符串中的\0然后用’d‘取代\0之后存入ef\0遇到\0说明追加结束 而如果想要自己追加自己我们还是要先找到\0然后再放入abc但当我们想放入\0时却发现原来字符串中的\0已经被我替换成’a‘了这样追加永远无法结束程序崩溃~ 那么我们可以使用strnact函数 语法格式 strnacts1 s2 len 此处简单的说明一下吧strnact比stract多了一个参数 下图是二者的函数 strnact函数多了一个count参数 前者是直接追加遇到\0就停止追加 后者则是追加count位字符之后停止追加 strstr 字符串操作函数找后者是不是前者的子串 语法格式 strstrs1 s2 返回值的说明 如果是子串就返回s2的首元素地址 如果不是子串就返回空指针NULL 小疑问 代码此时看起来已经可以运行了但是小明这时候提出了一个疑问 如果s2是cdef输出结果是什么 输出结果是yes 这就是问题所在所以我们在使用那些库函数之前先要进行一个判断s1和s2的长度是否相等如果相等再去判断如果不等直接返回0结束判断。 最终代码 #define _CRT_SECURE_NO_WARNINGS 1#includestdio.h #includestring.h #includeassert.hint is_left_move(char* s1, char* s2) {int len1 strlen(s1);int len2 strlen(s2);if (len1 ! len2){return 0;}strncat(s1, s2, len1);char* ret strstr(s1, s2);if (ret NULL){return 0;}else{return 1;}}int main() {char arr1[50] abcdef;//此处不能使用指针因为使用指针变量的话它就是常量是不能改变的char arr2[] cdefab;int ret is_left_move(arr1, arr2);//接收返回值来判断是否是if (ret 1){printf(yes\n);//是}else{printf(no\n);//不是}return 0; }结语 本来是想整理五道题再发的但现在刚写两道就四千多字了那我想还是发出去吧毕竟字符串左旋也比较经典就单独列出一篇来。 希望对各位有帮助我们下次见
http://www.dnsts.com.cn/news/107653.html

相关文章:

  • 深圳在哪些网站上面做推广设计单网站建设
  • 专业网站优化服务设计彩票网站开发
  • 获取网站全站代码开发网站用得最多的是什么语言
  • 用什么网站做cpa什么推广方法是有效果的
  • 公司网站怎么做优化设计网站公司收费
  • 焦作网站制作公司重庆工程造价信息期刊
  • 网站建设外包质量进度跟进永州 网站建设
  • 机关网站建设 方案dw做网站背景音乐
  • 深圳企业网站制作中心外卖平台做网站
  • 企业网站开发公司亚马逊平台的运营模式
  • 哪个网站做网销更好贵阳东方蜜蜂网站建设
  • 专做正品的护肤品网站找产品代理去哪个网站
  • 做网站前途网站做业务赚钱吗
  • 良精企业网站管理系统做网站安全认证
  • 免费发布推广的网站百度网站收录查询
  • 如何根据仿站做网站做效果图去哪个网站接活
  • 网站信息同步旅游哪个网站最好
  • 免费购物网站建设去网站做dnf代练要押金吗
  • 南宁网站seo如何做网站栏目规划
  • 盐城滨海建设局网站wordpress update
  • 网站标准宽度上海公司招聘信息查询
  • 定制一个企业网站多少钱软件开发属于技术服务吗
  • 做电影网站程序好用如何维护建设网站
  • 沈阳做网站公司有哪些wordpress 表情符号
  • 牡丹江网站建设定制开发举报个人备案网站做经营性
  • 求推荐好的网站建设平台怎么提高网站排名
  • 重庆平台网站建设哪里有长春网站建设方案托管
  • 美橙网站设计学网站建设需要多久
  • 做一百度网站吗国内做轮胎网站哪家好
  • 品牌的佛山网站建设股票网站排名哪个好