C常用的字符串函数实现
/**
查找字符串 source 中 是否有指定的子串出现,如果有返回第一个匹配的字符
@param source 源
@param chars 目标
@return 返回值
*/
char *find_char0(char const *source, char const *chars) {
if (source == NULL || chars == NULL) {
return NULL;
}
char const *sc1, *sc2;
for (sc1 = source; *sc1 != '\0'; ++sc1) {
for (sc2 = chars; *sc2 != '\0'; ++sc2) {
if (*sc1 == *sc2) {
return (char *)sc1;
}
}
}
return NULL;
}
/**
字符串copy 实现
@param dest 目的字符串指针
@param src 源字符串指针
@return 返回值
*/
char *strcpy_(char *dest, const char *src){
char *ret = dest;
assert(dest != NULL);
while ((*dest++ = *src++)) {
;
}
return ret;
}
/**
字符串拼接
@param dest 目标字符串指针
@param src 源字符串指针
@return 目标字符串作为返回值
*/
char *strcat_(char *dest, const char *src) {
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
//找到dest指向字符串的末尾 '\0'
while (*dest != '\0') {//注意此处while 不能写成(*dest++ != '\0'),因为一个循环结束前又++操作会跳过 '\0'
dest++;
}
//拷贝src指向的内容
while ((*dest ++ = *src++)) {
;
}
return ret;
}
/**
查找一个字符中是否包含某一子串
@param str 给定的长字符串
@param substr 子串
@return 是否包含子串 不包含返回NULL 包含非NULL
*/
char *strstr_(const char *str, const char *substr){
assert(str != NULL);
assert(substr != NULL);
if (*substr == '\0') {
return str;
}
while (*str) {
const char *s1 = str;
const char *s2 = substr;
while (*s1 && *s2 && *s1 == *s2) {
s1++;
s2++;
}
if (*s2 == '\0') {//遍历到s2结尾
return str;//返回str 因为 str 记录了初始值的位置
}
str++;
}
return NULL;
}
/**
字符串比较
@param str1 字符串1
@param str2 字符串2
@return 比较结果 >0 = 0 <0
*/
int strcmp_(const char* str1, const char *str2){
assert(str1 != NULL);
assert(str2 != NULL);
while (*str1 == *str2) {
if (*str1 == '\0') {
return 0;
}
str1++;
str2++;
}
//*str1 > *str2,返回值大于0 ,*str1 = *str2,返回值等于0 ,*str1 < *str2,返回值小于0
return *str1 - *str2;
}
/**
内存拷贝
@param dest 目标位置
@param src 源位置
@param count 长度 字节为单位
@return 目的位置地址
*/
char *memcpy_(void *dest, const void *src, size_t count) {
void *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while (count) {
*(char*)dest = *(char*)src;
dest = (char*)dest+1;
src = (char*)src+1;
count--;
}
return ret;
}
/**
反向拷贝
@param dest 目的地址
@param src 源地址
@param count 长度 字节为单位
@return 过程函数,无返回值
*/
void *memmove_(void *dest, void *src, size_t count) {
void *ret = dest;
char *str1 = (char*)dest;
char *str2 = (char*)src;
assert(dest != NULL);
assert(src != NULL);
if (str1 > str2) {
while (count--) {
*(str1 + count) = *(str2 + count);
}
}else {
while (count--) {
*str1++ = *str2++;
}
}
return ret;
}
/**
反转字符串实现,不借助新的数组
@param s 字符串
@return 反转后的字符串
*/
void *strrev(char *s) {
//h指向s的头部
char *h = s;
char *t = s;
char ch;
//t指向s的尾部
while(*t++){};
t--;//与t++抵消
t--;//往回跳过结束符 '\0'
//当h 和 t未重合时,交换它们所指向的字符
while (h<t) {
ch = *h;
*h++ = *t;
*t-- = ch;
}
return s;
}
C常用的字符串函数实现的更多相关文章
- oc语言常用的字符串函数
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- MYSQL常用的字符串函数
#字符串函数 #返回字符串的字符数量,对于此例而言,结果为5SELECT CHAR_LENGTH('计算机编程'); #合并字符串,对于此例而言,结果为‘我喜欢计算机’SELECT CONCAT('我 ...
- php中比较复杂但又常用的字符串函数
php系统核心库自带的函数中,字符串比数组函数较为简单,但还是有一些较为复杂但又很常用的函数,比如下面的这些函数 explode()函数 用一个字符串来分割另一个字符串,返回结果是一个数组 explo ...
- php常用的字符串函数
addslashes -- 使用反斜线引用字符串 chr -- 返回相对应于 ascii 码值所指定的单个字符. chunk_split -- 将字符串分割成小块 count_chars -- 返回 ...
- mysql中常用的字符串函数
写在分割线之前,个人以为,数据库应该具备简单的的数据加工能力.如同食品在吃之前,是要经过很多到工序的,有经过初加工.粗加工.精加工.深加工等.那么mysql也应该并必须担任起数据初加工以及粗加工的责任 ...
- 常用的字符串函数-S
header('content-type:text/html;charset=utf-f'); /* $var=addslashes($_GET['username']);//转义表单提交内容中的引号 ...
- 【C】常用的字符串函数
1. strcpy 函数名:strcpy 用法:char *strcpy(char *destin, char *cource) 功能:将一个字符串从一个拷贝到另外一个 程序示例: #include ...
- 一些常用的字符串函数(CLR函数)
原代码来自:东莞--小小大神 使用 --聚合函数 SELECT father_key,dbo.String_Agg(department_name) FROM dbo.b_department GRO ...
- 常用C字符串函数
static void str_repalce(char *src,char *from,char *to) { char *p,*q; int lenFrom; int le ...
随机推荐
- ES 安装 head安装
https://www.elastic.co/downloads/elasticsearch http://www.cnblogs.com/xuxy03/p/6039999.html https:// ...
- latex学习(二)
1.我是在ubuntu18.04下安装的,使用的是清华的源:https://mirrors.tuna.tsinghua.edu.cn/help/CTAN/ 下载安装包:http://mirror.ct ...
- git 命令常用总结
详细git教程可参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 基础命令 用 ...
- python os.system()和os.popen()
1>python调用Shell脚本,有两种方法:os.system()和os.popen(),前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容.>>>hel ...
- python 图片上添加文字
import PIL from PIL import ImageFont from PIL import Image from PIL import ImageDraw #设置字体,如果没有,也可以不 ...
- Entlib DAAB映射枚举类型
1. IRowMapper<UserDto> addressMapper = MapBuilder<UserDto> .MapAllProperties() .Map(p =& ...
- MSSQL 2012 修改所有表的架构Schame
ALTER SCHEMA [dbo] TRANSFER [sq_szswdjd].COM_Category ); declare csr1 cursor for select 'Name' = nam ...
- Vue:event对象
一.什么是event对象 event对象:代表的是事件的状态.比如获取当前的元素:e.Target. 二.事件冒泡 什么是事件冒泡呢?百度百科的解释如下: 当事件发生后,这个事件就要开始传播(从里到外 ...
- Java知多少(41)泛型详解
我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值. 假如我们现在要定义一个类来表示坐标,要求坐标的数据类型可以是整数.小数和字符串,例如: x = 1 ...
- 程序-代写(qq:928900200)
CS 310 Programming Assignment 4 Due April 27, 2014 5:00 P.M. About 15 years in the future... The Mar ...