一些字符函数的实现。
来源:互联网 发布:c#课本编程题及答案 编辑:程序博客网 时间:2024/05/17 06:20
#define _CRT_SECURE_NO_WARNINGS 1//求字符串长度。#define _CRT_SECURE_NO_WARNINGS 1#include#include//size_t my_strlen( const char *str)//{// assert(str != NULL);//int count = 0;//while (*str++)//{//count++;//}//return count;//}size_t my_strlen(const char *str){assert(str != NULL);if (*str++) return my_strlen(str)+1;//当*str不为\0时,调用该函数,并统计一个字符。elsereturn 0;//当*str为零时,递归结束。}int main(){const char *str = "1234567890";printf("%d\n", my_strlen(str)); system("Pause");return 0;}////字符串的比较。#include int my_strcmp(const char *dest, const char *src){while ((*src != '\0') && (*dest == *src)){dest++;src++;}return ((*dest - *src)>0 ? 1 : ((*dest - *src)<0 ? -1 : 0));}int main(){const char *p1 = "dbcd";const char *p2 = "dbc";printf("%d\n", my_strcmp(p1, p2));system("pause");return 0;}////判断一个字符串是不是另一个字符串的子字符串。#define _CRT_SECURE_NO_WARNINGS 1#include char *my_strstr(const char *dest, const char *src){char *src_temp ;//源字符串的指针临时变量。char *dest_temp ;//目标字符串的指针临时变量。while (*dest )//判断是否到目标字符串的最后一位。{ dest_temp = dest;//每次内循环结束重新赋值,为目标字符串的指针临时变量重新赋址。 src_temp = src;//每次内循环结束重新赋值,使源字符串的指针临时变量重新指向第一个字符。while ((*dest_temp )&&(*src_temp == *dest_temp++))//逐个判断源字符串字符是否等于目标字符串字符。{src_temp++;}if (*src_temp == '\0')//判断源字符串字符的指针临时变量是否达到最后一个字符。return dest;//如果是就返回目标字符串第一次正确匹配时的第一个字符的地址。dest++;//如果不是让目标字符串指针临时变量向后移动一个字节。}return NULL;//如果没有找到返回空指针。}int main(){const char *p1 = "cdcecdecd";const char *p2 = "cdcecdecde";printf("%p\n", my_strstr(p1, p2));system("pause");return 0;}////字符串的追加#include #includechar *my_strcat(char *dest,const char *src){assert(dest != NULL);//判断目标字符串指针临时变量是否为空。assert(src != NULL);//判断源字符串指针临时变量是否为空。char *ret = dest;//创建一个返回的指针变量,保存目标字符串的起始地址。while (*dest != '\0')//使目标字符串指针临时变量指向'\0'。{dest++;}while (*dest++ = *src++)//把源字符串内容追加给目标字符串。{;}return ret;//返回目标字符串的起始地址。}int main(){char arr[50] = "strcat use";char *p = "dest src";printf("%s", my_strcat(arr, p));system("pause");return 0;}//字符串的逆置#include char *Inver(char *dest){char *ret = dest;//创建一个返回的指针变量,保存目标字符串的起始地址。char *tm_val = dest;//源字符串的指针临时变量。while (*dest)//使源字符串的指针临时变量指向'\0'。{ dest++;}while (tm_val<(--dest))//交换内容{*tm_val = *tm_val^*dest;*dest = *dest^*tm_val;*tm_val = *tm_val^*dest;tm_val++;}return ret ;//返回目标字符串的起始地址。}int main(){char arr[30] = "abcdefg";printf("%s", Inver(arr));system("pause");return 0;}//memcpy()函数的实现。#include #include void *MY_memcpy(void *dest, const void *src,size_t n){char *dest_temp = (char*)dest;//用一个字符型指针接受一个强制类型转换后的目标的起始地址。char *src_temp = (char*)src;//用一个字符型指针接受一个强制类型转换后的源的起始地址。while (n--)//控制拷贝次数{*dest_temp++ = *src_temp++;//把源的内容一个字节一个字节的拷贝给目标,然后两个指针变量同时向后移动一个字节}return dest;//返回目标的起始地址}int main(){int arr[30] = { 0 };int arr1[5] = { 1, 2, 3, 4, 5 };int i = 0;MY_memcpy(arr, arr1, sizeof(arr1));/*MY_memcpy(arr+1, arr, sizeof(arr1));*///地址重叠时就会出现拷贝错误,与下面memmove()函数分别运行,对照结果/*memmove(arr + 1, arr, sizeof(arr1));*///验证地址重叠时拷贝后的结果while (i<10)printf("%d ",arr[i++] );system("pause");return 0;}//memmove()函数的实现。#define _CRT_SECURE_NO_WARNINGS 1#include #include void *MY_memmove(void *dest, const void *src, size_t n){if ((src < dest) && (((char*)src + n - 1) >= (char*)dest) )//当拷贝内容出现这种重叠时,采用倒序赋值。{while (n--){*((char*)dest + n) = *((char*)src + n);}}else{size_t i = 0;while (i 以上就是关于字符串函数的实现,当然还有一些没有实现,后期会慢慢补充,如果那里有错误,还望读者不吝赐教。
1 0
- 一些字符函数的实现。
- 一些常用的字符操作函数
- 关于字符函数的一些应用总结
- 一些C++的字符函数
- string 类 判断字符的一些函数
- 【一些题】一些重要函数的实现
- 一些共通的函数实现
- 一些共通的函数实现
- 一些通用的函数实现
- 一些共通的函数实现
- 虚拟字符驱动函数的实现
- 实现字符倒转的python函数
- 字符操作函数的模拟实现
- StringUtils的一些控制空白字符的函数
- 感觉经常用到的一些字符处理的函数
- 关于函数和字符指针的一些看法。
- 关于函数和字符指针的一些看法
- 关于指针和函数和字符数组的一些小结
- ActivityMQAPI详解
- LeetCode Weekly Contest 32解题思路
- Python:10分钟搞定不写代码的爬虫
- C# Action<T>、Func<T>、Predicate<T>委托的区别、用法
- 2_android studio工具用法积累
- 一些字符函数的实现。
- python之切片的理解
- 常见的电脑病毒
- 程序员面试金典--面试32之碰撞的蚂蚁
- 《Effective Modern C++》读书笔记(1) -- 模板类型推导(template type deduction)
- Ajax之在SSM中的json用法
- jquery与php交互之GET、 POST
- tips
- log4j的基本配置文件