- 浏览: 1998787 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
C字符串处理函数的实现(Linux) #include <stddef.h> char * ___strtok = NULL; char * strcpy(char * dest,const char *src) { char *tmp = dest; while ((*dest++ = *src++) != '\0') /* nothing */; return tmp; } char * strncpy(char * dest,const char *src,size_t count) { char *tmp = dest; while (count-- && (*dest++ = *src++) != '\0') /* nothing */; return tmp; } char * strcat(char * dest, const char * src) { char *tmp = dest; while (*dest) dest++; while ((*dest++ = *src++) != '\0') ; return tmp; } char * strncat(char *dest, const char *src, size_t count) { char *tmp = dest; if (count) { while (*dest) dest++; while ((*dest++ = *src++)) { if (--count == 0) break; } } return tmp; } int strcmp(const char * cs,const char * ct) { register signed char __res; while (1) { if ((__res = *cs - *ct++) != 0 || !*cs++) /*is !*cs++ necessary? incase more cmp*/ break; } return __res; } int strncmp(const char * cs,const char * ct,size_t count) { register signed char __res = 0; while (count) { if ((__res = *cs - *ct++) != 0 || !*cs++) break; count--; } return __res; } char * strchr(const char * s,char c) { for(; *s != c; ++s) if (*s == '\0') return NULL; return (char *) s; } size_t strlen(const char * s) { const char *sc; for (sc = s; *sc != '\0'; ++sc) /* nothing */; return sc - s; } size_t strnlen(const char * s, size_t count) { const char *sc; for (sc = s; *sc != '\0' && count--; ++sc) /* nothing */; return sc - s; } size_t strspn(const char *s, const char *accept) { const char *p; const char *a; size_t count = 0; for (p = s; *p != '\0'; ++p) { for (a = accept; *a != '\0'; ++a) { if (*p == *a) break; } if (*a == '\0') return count; ++count; } return count; } char * strpbrk(const char * cs,const char * ct) { const char *sc1,*sc2; for( sc1 = cs; *sc1 != '\0'; ++sc1) { for( sc2 = ct; *sc2 != '\0'; ++sc2) { if (*sc1 == *sc2) return (char *) sc1; } } return NULL; } char * strtok(char * s,const char * ct) { char *sbegin, *send; sbegin = s ? s : ___strtok; if (!sbegin) { return NULL; } sbegin += strspn(sbegin,ct); if (*sbegin == '\0') { ___strtok = NULL; return( NULL ); } send = strpbrk( sbegin, ct); if (send && *send != '\0') *send++ = '\0'; ___strtok = send; return (sbegin); } void * memset(void * s,char c,size_t count) { char *xs = (char *) s; while (count--) *xs++ = c; return s; } char * bcopy(const char * src, char * dest, int count) { char *tmp = dest; while (count--) *tmp++ = *src++; return dest; } void * memcpy(void * dest,const void *src,size_t count) { char *tmp = (char *) dest, *s = (char *) src; while (count--) *tmp++ = *s++; return dest; } void * memmove(void * dest,const void *src,size_t count) { char *tmp, *s; if (dest <= src) { tmp = (char *) dest; s = (char *) src; while (count--) *tmp++ = *s++; } else { tmp = (char *) dest + count; s = (char *) src + count; while (count--) *--tmp = *--s; /*12345678*/ } /*12345678*/ return dest; } int memcmp(const void * cs,const void * ct,size_t count) { const unsigned char *su1, *su2; signed char res = 0; for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) if ((res = *su1 - *su2) != 0) break; return res; } /* * find the first occurrence of byte 'c', or 1 past the area if none */ void * memscan(void * addr, unsigned char c, size_t size) { unsigned char * p = (unsigned char *) addr; while (size) { if (*p == c) return (void *) p; p++; size--; } return (void *) p; } void main(void) { return; } 补充strstr char * strstr (const char *haystack, const char *needle) { char *result = (char *)NULL; if ((haystack != (char *)NULL) && (needle != (char *)NULL)) { register int i; int hl = strlen (haystack); int nl = strlen (needle); for (i = 0; i < (hl - nl); i++) if (strncmp (haystack + i, needle, nl) == 0) { result = haystack + i; break; } } return (result); } 还有 加州大学的: char *strstr(const char *string, const char *substring) { const char *a, *b; b = substring; if (*b == 0) { return (char*)string; } for( ; *string != 0; string += 1) { if (*string != *b) { continue; } a = string; while ((*a++ == *b++) && (*b != 0) ); if (*b == 0) { return (char*) string; } b = substring; } } 最后是AT&T: extern char* strstr(register const char* s1, register const char* s2) { register int c1; register int c2; register const char* t1; register const char* t2; if (s2) { if (!*s2) return (char*)s1; c2 = *s2++; while (c1 = *s1++) if (c1 == c2) { t1 = s1; t2 = s2; do { if (!*t2) return (char*)s1 - 1; } while (*t1++ == *t2++); } } return 0; } -------------------------------------------------------------------------- http://blog.csdn.net/wzbob/archive/2006/11/10/1377600.aspx c和汇编实现 一些基本字符串处理函数 1. 将一个字符串(src)拷贝到另一个字符串(dest),直到遇到NULL 字符后停止。 char *strcpy (char *dest, const char *src) { _asm { pushf mov esi,src mov edi,dest cld l1: lodsb stosb test al,al jne l1 popf } return dest; } 2.拷贝源字符串count 个字节到目的字符串。 char *strncpy (char *dest, const char *src, int count) { _asm{ pushf mov esi,src mov edi,dest mov ecx,count cld l1: dec ecx js l2 lodsb stosb test al,al jne l1 rep stosb l2: popf } return dest; } 3.将源字符串拷贝到目的字符串的末尾处。 char *strcat (char *dest, const char *src) { _asm { pushf mov esi,src mov edi,dest xor al,al mov ecx,0xffffffff cld // 清方向位。 repne scasb dec edi l1: lodsb stosb test al,al jne l1 popf } return dest; } 4.将源字符串的count 个字节复制到目的字符串的末尾处,最后添一空字符。 char *strncat (char *dest, const char *src, int count) { _asm { pushf mov esi,src mov edi,dest xor al,al mov ecx,0xffffffff cld repne scasb dec edi mov ecx,count l1: dec ecx js l2 lodsb stosb test al,al jne l1 l2: xor al,al stosb popf } return dest; } 5. 将一个字符串与另一个字符串进行比较。 int strcmp (const char *csrc, const char *ct) { _asm{ pushf mov edi,csrc mov esi,ct cld l1: lodsb scasb jne l2 test al,al jne l1 xor eax,eax jmp l3 l2: mov eax,1 jl l3 neg eax l3: popf } } ------------------------------------------------------------------------------------ 1. strlen(),计算字符串长度 int strlen(const char string) { int i=0; while(string[i]) i++; return i; } 2. strcpy(), 字符串拷贝. char *strcpy(char *destination, const char *source) { while(*destinaton++=*source++); return (destination-1); } 3. strcat(), 字符串的连接. char *strcat(char *target,const char *source) { char *original=target; while(*target) target++; // Find the end of the string while(*target++=*source++); return(original); } 4. streql(), 判断两个字符串是否相等. int streql(char *str1,char *str2) { while((*str1==*str2)&&(*str1)) { str1++; str2++; } return((*str1==NULL)&&(*str2==NULL)); } 5. strchr(), 在字符串中查找某个字符. char *strchr(const char *string,int letter) { while((*string!=letter)&(*string)) string++; return (string); } 6. chrcnt(), 计算某个字符在字符串中出现的次数. int chrcnt(const char *string,int letter) { int count=0; while(*string) if(*string==letter)count++; return count; } 7. strcmp(), 判断两个字符串是否相等. int strcmp(const char *str1,const char *str2) { while((*str1==*str2)&&(*str1)) { str1++; str2++; } if((*str1==*str2)&&(!*str1)) //Same strings return o; else if((*str1)&&(!*str2)) //Same but str1 longer return -1; else if((*str2)&&(!*str1)) //Same but str2 longer else return((*str1>*str2)?-1:1); }
发表评论
-
Berkeley DB 使用经验总结
2012-08-27 14:41 3022作者:陈磊 NoSQL是现在互联网Web2.0时代备受 ... -
嵌入式数据库系统Berkeley DB
2012-08-27 14:37 1470前言 UNIX/LINUX平台下的数据库种类非常多 ... -
C语言中标准输入流、标准输出流、标准错误输出流
2011-06-13 14:32 9194C语言中标准输入流、标准输出流、标准错误输出流 在 ... -
Rsync 实现原理
2011-05-12 20:06 8249Rsync 实现原理 前言 关于rsync的原始文档 ... -
c++简单的虚函数测试
2011-04-27 14:25 967#include <iostream> u ... -
C++文件行查找
2011-04-26 14:10 1349#include <iostream> # ... -
c++偏特化简单示例
2011-04-13 11:17 2106c++偏特化 // temp1.c ... -
GDB调试精粹及使用实例
2011-03-16 14:06 1078GDB调试精粹及使用实例 一:列文件清单 1. ... -
简单的ini文件解析
2011-02-12 16:36 1569int GetKeyVal(const string s ... -
scanf族函数高级用法
2011-01-25 16:00 2480如何解释 fscanf(fd,&quo ... -
使用scons替代makefile(1)
2011-01-25 11:58 3637早在多年前我刚开始接触linux下的C程序时,经常被makef ... -
使用scons替代makefile(2)
2011-01-25 11:57 3525本篇文章接着上一篇进一步介绍scons的使用方法,主要介绍静态 ... -
使用scons替代makefile(3)
2011-01-25 11:55 4773在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序 ... -
C 支持动态添加测试数据的测试代码
2011-01-13 17:22 1075/下面的定义为了支持可扩增。 //当需要增加一个新的测试用列 ... -
Linux下Makefile的automake生成
2010-12-28 16:55 1044******************helloworld.c* ... -
SCons笔记(详细版)
2010-12-23 16:11 103711. 基本使用 SConstruct文件就功能而言相当于Ma ... -
scons 学习
2010-12-23 11:14 2106scons 学习 作者:Sam(甄峰) sam_code@h ... -
scons随笔
2010-12-22 20:20 4635scons随笔 Scons是新一代的软件构件工具,或者说ma ... -
Scons在linux下的安装和使用
2010-12-21 11:59 3195因为正在用的一个开源软件需要的Developm ... -
排列组合的实现
2010-12-20 12:41 1009简单算法: 从前往后(或者从后往前)每次交换一个位置。当存在 ...
相关推荐
字符串处理函数大全,主要包括的是c和c++
一些C 专用的字符串处理函数集,主要包括以下函数: 包括: IsNumeric——检查串是否为数字串 Upcase——变成大写串 Lowercase——变成小写串 Trim——截掉串尾的空格 RTrim——截掉串开始处的空格 LTrim——截掉串...
字符串连接就是将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,在字符串处理函数中,strcat 函数具有字符串连接功能。下面是用C语言实现不使用是strcat 函数实现连接两个字符串的功能。 源代码:...
自己对源代码做的一些整理,包括:atoi itoa strcpy strcat strlen memcpy memset等等常用的字符串处理函数,提供源代码实现。
资料比较全地整理了string.h中常见的字符串处理函数,对每个函数完整地实现并有简要的注释。如果你喜欢深入研究C编译器技术,本资料值得你拥有。
收集常见的c库里的字符串跟内存操作源代码的实现。
字符处理:不使用 C 语言库函数自行编制函数实现字符串的复制、连接、转换为大写、小写、字符串比较功能 这里加载标准输入输出库只是为了输出测试结果函数本身不使用
自定义函数实现 C-字符串基本操作 交换 C-字符串 C-字符串数组排序
将一个字符串按分割串分割为字符串数组。 在处理字符串方面有很好的参考价值
逗号分隔字符串,Vc 字符处理示例源码, 以逗号为分隔点,自由任意拆分字符串,经常编写代码的朋友可能会想到Split,对,本代码就是使用Split函数实现分隔字符串,这相当实用,在日常编程中,对字符串的截娶过滤与...
1,strs.zip 实现字节数组, 同c中的字符数组一样好用(6KB) 2,modules.zip 字符串处理的12个例子(13KB) 3,strings.zip 字符串处理函数(4KB) 4,stringfuncs.zip 字符串处理函数(9KB) 5,search&...
编写一函数char *my_replace(char *s1, char *s2, char *s3), 实现如下功能:把字符串s1中所有出现的字符串s2都替换成字符串s3,并通过函数名返回替换后的新字符串,但不得破坏s1。例如,当s1=“aabcdabce”, s2=...
头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。函数实现: ...
具体实现上,定义了一个delnum函数,该函数接受一个字符数组s作为参数,并通过两个变量i和j来遍历字符串和构建新字符串。在遍历过程中,如果当前字符不是数字字符,则将其复制到新字符串中,同时更新变量j的值为j+1...
1,strs.zip 实现字节数组, 同c中的字符数组一样好用(6KB)<END><br>2,modules.zip 字符串处理的12个例子(13KB)<END><br>3,strings.zip 字符串处理函数(4KB)<END><br>4,stringfuncs.zip 字符串处理函数(9...
比较字符串是任何编程语言的字符串处理功能中重要的特性之一。在PHP中除了可以使用比较运算符号(==、<或>)加以比较外,还提供了一系列的比较函数,使PHP可以进行更复杂的字符串比较。如strcmp()、strcasecmp()...
下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@...
C/C++面试之算法系列--几个典型的内存拷贝及字符串函数实现 写一个函数,完成内存之间的拷贝。[考虑问题是否全面,是否考虑内存重叠问题] 返回void *支持链式操作,参数类型是void *以支持任意类型的指针,输入...
KMP字符串模式匹配通俗点说就是一种在一个字符串中定位另一个串的高效算法。简单匹配算法的时间复杂度为O(m*n);KMP匹配算法。可以证明它的时间复杂度为O(m+n).。 一.简单匹配算法 先来看一个简单匹配算法的函数: ...