38.C语言字符串总结
1.自己实现三个常用函数 strlen,strcpy,strstr
- 自己实现strstr函数,如果找到返回首地址,找不到则返回NULL
- //查找元素,返回首地址
- char *mystrstr(const char *_Str,const char *_SubStr)
- {
- //如果有一个为空,则返回NULL
- if (_Str == NULL || _SubStr == NULL)
- {
- return NULL;
- }
- //psrc,psub保存源字符串和子字符串当前查询到的地址
- char *psrc = _Str;
- char *psub = _SubStr;
- //如果源字符串没有遍历晚,则继续遍历
- while (*psrc != '\0')
- {
- //创建新的临时地址,保存当前遍历到的地址
- char *ptmp_src = psrc;
- char *ptmp_sub = psub;
- int flag = ;//首先假设字符串找到
- //如果自字符串没有遍历完,则继续遍历
- while (*ptmp_sub != '\0')
- {
- //如果源字符串提前结束,则返回NULL
- if (*ptmp_src == '\0')
- {
- return NULL;
- }
- //如果当前遍历到的不相等,则flag置0,跳出循环
- if (*ptmp_src != *ptmp_sub)
- {
- flag = ;
- break;
- }
- else//否则同时向后移动一位
- {
- ptmp_src++;
- ptmp_sub++;
- }
- }
- //如果找到了返回首地址
- if (flag)
- {
- return psrc;
- }
- //如果没找到源字符串向后移动一位,再进行遍历
- psrc++;
- }
- return NULL;
- }
- 自己实现strlen函数
- unsigned int mystrlen(const char *str)
- {
- int length = ;
- for (int i = ;; i++)
- {
- if (*(str + i) == '\0')
- {
- break;
- }
- length++;
- }
- return length;
- }
- 自己实现strcpy函数
- char *mystrcpy(char *dest, const char *source)
- {
- if (dest == NULL || source == NULL)
- {
- return NULL;
- }
- for (int i = ;; i++)
- {
- dest[i] = source[i];
- if (*(source + i) == '\0')
- {
- break;
- }
- return dest;
- }
- }
2.字符串的排序以及自己实现strcmp
- 字符串的排序调用qsort
- int compare(const void *p1, const void *p2)//传递的是数组元素的地址,类型是**,要先转化为**的指针
- {
- const char **pstr1 = p1;
- const char **pstr2 = p2;
- //去每个元素首地址比较两个字符串
- return strcmp(*pstr1, *pstr2);
- }
- void main()
- {
- char *str[] = { "calc","apple","run","" ,"boat","dead","father","son","hello",""};
- qsort(str, , , compare);
- for (int i = ; i < ; i++)
- {
- puts(str[i]);
- }
- system("pause");
- }
- 字符串的排序,冒泡法
- void main()
- {
- char str[][] = { "calc","apple","run","" ,"boat","dead","father","son","hello","" };
- for (int i = ; i < - ; i++)//控制次数
- {
- for (int j = ; j < - i - ; j++)//两个两个比较,大数沉底
- {
- if (strcmp(str[j], str[j + ]) > )
- {
- char strtemp[] = { };
- strcpy(strtemp, str[j]);
- strcpy(str[j], str[j + ]);
- strcpy(str[j + ], strtemp);
- }
- }
- }
- for (int i = ; i < ; i++)
- {
- puts(str[i]);
- }
- system("pause");
- }
- 自己实现strcmp
- int mystrcmp(const char * _Str1, const char * _Str2)
- {
- if (_Str1 == NULL || _Str2 == NULL)
- {
- return ;
- }
- char *pstr1 = _Str1;
- char *pstr2 = _Str2;
- //一直循环到两个字符不相等
- while (*pstr1 == *pstr2 && *pstr1 != '\0')
- {
- pstr1++;
- pstr2++;
- }
- //如果都到两个字符串结尾
- if (*pstr1 == '\0' && *pstr2 == '\0')
- {
- return ;
- }
- //如果有一个到结尾
- else if (*pstr1 == '\0' && *pstr2 != '\0')
- {
- return -;
- }
- else if (*pstr1 != '\0' && *pstr2 == '\0')
- {
- return ;
- }
- //如果都没到结尾
- else
- {
- return *pstr1 > *pstr2 ? : -;
- }
- }
不常用的字符串函数
- 自己实现strset(char *p,char ch):填充字符串
- void mystrset(char *p, char ch)
- {
- while (*p!=NULL)
- {
- *p = ch;
- p++;
- }
- }
- void mystrset(char *p, char ch)
- 自己实现strrev(char *p)
- void mystrrev(char *p)
- {
- int len = strlen(p);
- for (int i = ; i < len/; i++)
- {
- p[i] = p[len - -i];
- }
- }
- void mystrrev(char *p)
- 自己实现_strlwr(字符串大写转小写)
- void mystrlwr(char *p)
- {
- while (*p != '\0')
- {
- if (*p >= 'A' && *p <= 'Z')
- {
- (*p) += ;
- }
- p++;
- }
- }
- void mystrlwr(char *p)
- 自己实现_strupr(字符串小写转大写)
- void mystrupr(char *p)
- {
- while (*p != '\0')
- {
- if (*p >= 'a' && *p <= 'z')
- {
- (*p) -= ;
- }
- p++;
- }
- }
- void mystrupr(char *p)
38.C语言字符串总结的更多相关文章
- C.【转】C语言字符串与数字相互转换
1.gcvt 把浮点数转成字符串 - CSDN博客.html(https://blog.csdn.net/dxuehui/article/details/52791412) 1.1. 函数名: gcv ...
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
- C语言字符串拷贝
C语言字符串拷贝利用指针操作,要清楚知道指针的指向 代码如下: #include <stdio.h> #include <assert.h> #include <stri ...
- C语言字符串长度(转)
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项. C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度. 在程序里,一般会用strlen()函数或sizeof ...
- C语言字符串操作常用库函数
C语言字符串操作常用库函数 *********************************************************************************** 函数 ...
- c语言字符串操作大全
C语言字符串操作函数 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #incl ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- C 语言字符串连接的 3种方式
C 语言字符串连接的 3种方式 #include<stdio.h> #include<stdlib.h> #include<string.h> char *join ...
- C语言字符串声明
重新学习C语言字符串声明char *a="nihao";char a[]="nihao";什么区别?前者定义的是指针,并且指向字符串常量“nihao”,后者是字 ...
随机推荐
- HDFS的底层原理
- 【转载】AngularJS 用$sce服务来过滤HTML标签,解决无法正确显示后台传递的html标签
angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有 ...
- PostgreSQL Replication之第一章 理解复制概念(2)
1.2不同类型的复制 现在,您已经完全地理解了物理和理论的局限性,可以开始学习不同类型的复制了. 1.2.1 同步和异步复制 我们可以做的第一个区分是同步复制和异步复制的区别. 这是什么意思呢?假设我 ...
- kotlin MutableList sort
fun MutableList<Int>.swap(index1: Int, index2: Int) {val tmp = this[index1] // 'this' correspo ...
- hiho147周 - 数据结构 bitset
题目链接 n个5维数,对于每个数,输出小于他的数的个数(每个维度都比他小); #include <cstdio> #include <cstring> #include < ...
- es6 学习1 let表示变量 、const表示常量 与 var 变量的区别
一.let 1.看下代码,在函数中无论在哪里声明变量,都会自动提到函数顶部,这就是函数变量提升,它的作用于为当前函数中. function aa() { if(bool) { var test = ' ...
- 企业级Nginx+Keepalived集群实战(双主架构)
随着Nginx在国内的发展潮流,越来越多的互联网公司都在使用Nginx,Nginx高性能.稳定性成为IT人士青睐的HTTP和反向代理服务器.Nginx负载均衡一般位于整个网站架构的最前端或者中间层,如 ...
- echarts 初始化失败问题。
dom 实例容器,一般是一个具有高宽的div元素. 注:如果div是隐藏的,ECharts 可能会获取不到div的高宽导致初始化失败,这时候可以明确指定div的style.width和style.he ...
- OpenGL 获取当前屏幕坐标对应的三维坐标
转自原文 OpenGL 获取当前屏幕坐标对应的三维坐标,使用很简单glu库中的一个函数 #include <GL/glut.h> #include <stdlib.h> #in ...
- Snail—UI学习之导航视图控制器UINavigationController(系统)
背景 有一个根视图控制器 然后跳转到第一个界面 第一个界面能够返回到根视图 也能够跳转到第二个视图 第二个视图能够直接返回到根视图 新建三个ViewController RootViewCon ...