字符串操作函数的实现方法(代码)
来源:互联网 发布:淘宝退货会影响权重吗 编辑:程序博客网 时间:2024/06/06 00:00
说明
字符串操作函数在C语言中的使用是相当多的,也难怪标准库函数有定义实现,也是一个很明智的选择,帮助我们简化了对字符串的操作。
其实我们也可以尝试写一下这些常用函数的具体实现方法,也可以帮助我们对这些函数有更深的理解,之后使用时也会更加自如。
查看函数的使用手册
要实现一个函数,当然先需要知道它的作用是什么,相信大多数人都会摆渡,基本也都能解决问题。Linux环境下,其实我们可以用man命令查看函数的使用说明,有很详细的讲解,包括函数的声明、使用描述、返回值等,只不过是英文的,但是可以尝试查看,相信以后会有帮助。
具体的使用我就不写了,直接写实现代码,不一定十分严密,也应该不是最简洁高效的,但基本没大问题,经供参考。
注意:
1、函数开头的输入错误的判断我写的不严密,不要照着使用。我觉得有些可以打印提示后,直接用assert退出。
2、个人觉得大多数都是不难的,最难的可能就是strtok函数了,一定要先理解它的使用方法。
字符串操作函数
1、strlen
#define ERR_INPUT -2int strlen(const char *str){ if(!str) { printf("INPUT ERROR!\n"); return ERR_INPUT; } int len = 0; while(str[len] != '\0') { len++; } return len;}
2、strcat
char *strcat(char *dest, const char *src){ if(!dest || !src) { printf("INPUT ERROR!\n"); return NULL; } int len = strlen(dest); int i = 0; while(src[i] != '\0') { dest[len + i] = src[i]; i++; } dest[len + i] = '\0'; return dest;}
3、strcmp
int strcmp(const char *str1, const char *str2){ if(!str1 || !str2) { printf("INPUT ERROR!\n"); return -2; } int len = strlen(str1); int len2 = strlen(str2); if(len2 < len) len = len2; int i = 0; int check = 0; for(i = 0; i <= len; i++) { if(str1[i] > str2[i]) { check = 1; break; } else if(str1[i] < str2[i]) { check = -1; break; } } return check;}
4、strncmp
int strncmp(const char *str1, const char *str2, int n){ if(!str1 || !str2 || n < 1) { printf("INPUT ERROR!\n"); return -2; } int i = 0; int check = 0; for(i = 0; i < n; i++) { if(str1[i] > str2[i]) { check = 1; break; } else if(str1[i] < str2[2]) { check = -1; break; } } return check;}
5、strcasecmp
int strcasecmp(const char *str1, const char *str2){ if(!str1 || !str2) { printf("INPUT ERROR!\n"); return -2; } char p1, p2; int len = strlen(str1); int len2 = strlen(str2); if(len2 < len) len = len2; int i = 0; int check = 0; for(i = 0; i <= len; i++) { p1 = str1[i]; p2 = str2[i]; if(str1[i] >= 'A' && str1[i] <= 'Z') p1 = str1[i] + 32; if(str2[i] >= 'A' && str2[i] <= 'Z') p2 = str2[i] + 32; if(p1 > p2) { check = 1; break; } else if(p1 < p2) { check = -1; break; } } return check;}
6、strchr
char *strchr(const char *str, int n){ if(!str || n < 0 || n > 127) { printf("INPUT ERROR!\n"); return NULL; } char *p = NULL; int i = 0; while(str[i] != '\0') { if(str[i] == n) { p = (char *)str + i; break; } i++; } return p;}
7、strtok
char *strtok(char *str, const char *s){ if(!str || !s) { printf("INPUT ERROR!\n"); return NULL; } static char *last = NULL; static int p = 0; static int a[100] = {0}; if(str == NULL && last == NULL) return ; if(last != NULL) { p++; last = last + a[p] - a[p - 1]; return (last + 1); } int lenstr = strlen(str); int lens = strlen(s); int m = 0; int n = 0; int i = 0; for(m = 0; m < lenstr; m++) { for(n = 0; n < lens; n++) { if(str[m] == s[n]) { str[m] = '\0'; a[i] = m; i++; m++; break; } } } last = str; return last;}
8、strcpy
char *strcpy(char *dest, const char *src){ if(!dest || !src) { printf("INPUT ERROR!\n"); return NULL; } int i = 0; while(src[i] != '\0') { dest[i] = src[i]; i++; } dest[i] = '\0'; return dest;}
9、strncpy
char *strncpy(char *dest, const char *src, int n){ if(!dest || !src || n < 1) { printf("INPUT ERROR!\n"); return NULL; } int i = 0; while(src[i] != '\0' && i < n) { dest[i] = src[i]; i++; } while(i < n) { dest[i] = '\0'; i++; } return dest;}
10、strstr
char *strstr(const char *haystack, const char *needle){ if(!haystack || !needle) { printf("INPUT ERROR!\n"); return NULL; } int len1 = strlen(haystack); int len2 = strlen(needle); int len = len1 - len2 + 1; int i = 0; int t = 0; char *p = NULL; int flag = 1; for(i = 0; i < len; i++) { flag = 1; for(t = i; t < len2 + i; t++) { if(haystack[t] != needle[t - i]) { flag = 0; break; } } if(flag) { p = (char *)haystack + i; break; } } return p;}
0 0
- 字符串操作函数的实现方法(代码)
- 字符串操作函数的具体实现的代码
- 字符串操作函数的实现
- 对python字符串操作的几种方法(函数)
- 字符串操作函数实现
- 字符串操作函数实现
- 底层实现的字符串操作函数
- 字符串部分操作的函数实现
- 各种字符串操作函数的实现
- 常用的字符串操作函数实现
- C字符串操作函数的实现
- 自己实现的字符串操作函数
- 字符串操作函数的使用及其实现
- 一些字符串操作函数的模拟实现
- c++字符串操作函数的源码实现
- C字符串操作函数代码
- 3.2字符串-各种字符串操作函数的实现
- vb.net 字符串操作函数(数字转字符串去掉空格的方法)
- HDU 3032.Nim or not Nim?【SG函数打表找规律】【4月11】
- 简单springmvc搭建流程
- centos6.5安装配置cobbler
- Android 属性动画(Property Animation) 完全解析 (下)
- 关于位操作学习的一些记录
- 字符串操作函数的实现方法(代码)
- Navicat for Oracle 安装使用
- 最大乘积
- 多线程系列:TheadLocal
- C++ string 中 reverse()、assign()、split()
- WebKit内核学习之三
- Spring配置数据源的三种方式 (dbcp,c3p0,jndi).
- 基于h264的SDP相关字段解析
- classloader1