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++;
} } - 自己实现strrev(char *p)
void mystrrev(char *p)
{
int len = strlen(p);
for (int i = ; i < len/; i++)
{
p[i] = p[len - -i];
}
} - 自己实现_strlwr(字符串大写转小写)
void mystrlwr(char *p)
{
while (*p != '\0')
{
if (*p >= 'A' && *p <= 'Z')
{
(*p) += ;
}
p++;
}
} - 自己实现_strupr(字符串小写转大写)
void mystrupr(char *p)
{
while (*p != '\0')
{
if (*p >= 'a' && *p <= 'z')
{
(*p) -= ;
}
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”,后者是字 ...
随机推荐
- Flume框架基础
* Flume框架基础 框架简介: ** Flume提供一个分布式的,可靠的,对大数据量的日志进行高效收集.聚集.移动的服务,Flume只能在Unix环境下运行. ** Flume基于流式架构,容错性 ...
- python3.x 学习笔记1(基础知识)
1.python模块: 标准库和第三方库,第三方库需要下载安装 2.模块sys: 命令 功能 sys.stdin 标准输入流sys.stdout 标准输出流sys.stderr ...
- OpenGL编程逐步深入(七)旋转变换
准备知识 这一节我们来看一下旋转变换.旋转变换指的是给我们一个指点的点和角度,我们需要绕着过该点的轴线將对象旋转对应的角度.这里我们只改变X/Y/Z中的两个分量,第三个分量保持不变.这意味着我们的图形 ...
- .NET与JAVA RSA密钥格式转换
一.该篇内容用于记录.net和Java之间,RSA公密钥的转换 using Org.BouncyCastle.Asn1.Pkcs; using Org.BouncyCastle.Asn1.X509; ...
- PostgreSQL服务器存储参数的内部查看方法和实际表述之间的关系
postgres=# show wal_buffers ; wal_buffers ------------- 4MB(1 row) postgres=# show port; port ------ ...
- 去除input的前后的空格
这里用的是jquery的方法
- MySql系列之表的数据类型
存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件 ...
- MVC-easyui-EF
easyui+jQuery+MVC+EF的一个演示 环境:visual studio 2013+sql server 创建新项目:visual C# -> Web -> visual st ...
- python 命令行下的命令参数
本文所介绍的命令或许是在依赖包里使用的,说白了,我不太清除,由于刚开始学习,所以对知识了解不清楚,按说学习本应该学以解惑,可是为了把知识面展开的太广而影响主要知识的学习,我决定抓住主要矛盾,把有些困惑 ...
- python中一些有用的函数------持续更新中
strip() 函数 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. str2 = " Runoob " # 去除首尾空格 print (str2.strip()) ...