手动实现的C语言string.h 头文件的字符串函数
来源:互联网 发布:ubuntu php 安装路径 编辑:程序博客网 时间:2024/05/16 03:00
研究C语言,首先要明白其库函数…
001
#include<stdio.h>
002
char
*
strcpy
(
char
* dest,
const
char
* src);
//字符串拷贝
003
char
*
strcat
(
char
* dest,
const
char
* src);
//字符串连接,返回dest字符串
004
char
*
strncat
(
char
* dest,
const
char
* src,
int
size);
//把src前n个字符串连接到dest,返回dest字符串
005
int
strcmp
(
const
char
* src1,
const
char
* src2);
//字符串比较 返回值: 1:> 0:= -1<
006
int
strncmp
(
const
char
* src,
const
char
* dst,
int
size);
//dst前n个字符和src比较返回值: 1:> 0:= -1<
007
int
strlen
(
const
char
* src);
//返回字符串长度
008
char
*
strchr
(
const
char
* src,
int
ch);
//字符ch在字符串第一次出现的位置,返回出现字符ch位置开始到字符串结束位置的指针
009
char
*
strrchr
(
const
char
* src,
int
ch);
//字符ch在字符串最后一次出现的位置,返回出现字符ch位置开始到字符串结束位置的指针
010
char
*
strstr
(
const
char
* src,
const
char
* sub);
//字符串sub在字符串第一次出现的位置,返回出现字符串sub位置开始到字符串结束位置的指针
011
//memery copy operate function==================//
012
void
*
memcpy
(
void
* dest,
const
void
* src,unsigned
int
size);
//把src的内容拷到dest内存里去,并返回dest指向的内存地址
013
void
*
memset
(
void
* dst,
int
ch, unsigned
int
size);
//把dst内存中的size大小用使用ch来初始化,并返回dest指向的内存地址
014
int
memcmp
(
const
void
* src1,
const
void
* src2, unsigned
int
size);
//比较内存中src1与src2中的前size 个字符是否相等,1:> 0:= -1< (see strncmp(const char*,const char*,unsigned int))
015
void
*
memchr
(
const
void
* dst,
int
ch, unsigned
int
size);
//在内存中的某一范围内,查找特定的字符ch,并返回指向ch的指针
016
void
*
memmove
(
void
* dst,
const
void
* src, unsigned
int
size);
//memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些.返回指向dest的指针
017
//memery copy operate function==================//
018
int
main()
019
{
020
// printf("the string len=%d/n",strlen("helloWorld"));
021
// char dest[20];
022
// printf("the string is=%s/n",strcpy(dest,"helloWorld"));
023
// char dest[30]="hello--";
024
// printf("after connect sub string is=%s/n",strcat(dest,"world"));
025
// char dest[30]="hello--";
026
// printf("after connect sub string is=%s/n",strncat(dest,"world_programe",4));
027
// printf("the string compare result is=%d/n",strcmp("hello","aello"));
028
// printf("the string compare result is=%d/n",strncmp("hello","hello_good",5));
029
// printf("the char appear position is=%s/n",strchr("hello-r-es-d",'-'));
030
// printf("the char appear position is=%s/n",strrchr("hel*lo-r*-e*s-d",'*'));
031
// printf("the sub string is=%s/n",strstr("hello_world","lo"));
032
char
dest[20];
033
// printf("the sub string is=%s/n",memcpy(dest,"hello..111",sizeof(dest)));
034
printf
(
"the sub string is=%s/n"
,
memset
(dest,
'0'
,
sizeof
(dest)));
035
return
0;
036
}
037
//=========================================================//
038
int
strlen
(
const
char
* src)
039
{
040
const
char
* p=src;
041
while
(*p!=
'/0'
)
{
p++;
}
042
return
p-src;
043
}
044
//=========================================================//
045
char
*
strcpy
(
char
* dest,
const
char
* src)
046
{
047
if
(dest&&src)
048
{
049
int
i=0;
050
while
((*(dest+i)=*(src+i))!=
'/0'
) i++;
051
*(dest+i)=
'/0'
;
052
// return dest;
053
}
054
return
dest;
055
}
//微软源码
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */
return( dst );
}
//
056
//=========================================================//
057
char
*
strcat
(
char
* dest,
const
char
* src)
058
{
059
if
(dest&&src)
060
{
061
int
len=
strlen
(dest);
062
// printf("len=%d/n",len);
063
int
i=0;
064
while
((*(dest+len+i)=*(src+i))!=
'/0'
) i++;
065
*(dest+len+i)=
'/0'
;
066
}
067
return
dest;
068
}
069
//=========================================================//
070
char
*
strncat
(
char
* dest,
const
char
* src,
int
size)
071
{
072
if
(dest&&src)
073
{
074
int
len=
strlen
(dest);
075
int
i=0;
076
while
((i<size)&&((*(dest+len+i)=*(src+i))!=
'/0'
)) i++;
077
}
078
return
dest;
079
}
080
//=========================================================//
081
int
strcmp
(
const
char
* src1,
const
char
* src2)
082
{
083
int
equal;
084
int
i=0;
085
while
(!(equal=*(unsigned
char
*)(src1+i)-*(unsigned
char
*)(src2+i))&&(*(src1+i))&&(*(src2+i)))
086
i++;
087
if
(equal<0)
return
-1;
088
else
if
(equal>0)
return
1;
089
else
return
0;
090
}
int strcmp(char *str1,str2)
{
char *p1,*p2;
p1=str1;
p2=str2;
while(*p2 && *p1)
if(*(p1++)- *(p2++) )return *(p1++)- *(p2++) ;
return 0;
}
{
char *p1,*p2;
p1=str1;
p2=str2;
while(*p2 && *p1)
if(*(p1++)- *(p2++) )return *(p1++)- *(p2++) ;
return 0;
}
091
//=================比较两个字符串前size 个字符串是否相等==========================//
092
int
strncmp
(
const
char
* src1,
const
char
* src2,
int
size)
093
{
094
int
equal;
095
int
i=0;
096
while
((i<size)&&!(equal=*(unsigned
char
*)(src1+i)-*(unsigned
char
*)(src2+i))&&(*(src1+i))&&(*(src2+i)))
097
i++;
098
if
(equal<0)
return
-1;
099
else
if
(equal>0)
return
1;
100
else
return
0;
101
}
102
//=========================================================//
103
char
*
strchr
(
const
char
* src,
int
ch)
104
{
105
int
i=0;
106
while
(*(src+i)&&(*(src+i)!=ch)) i++;
107
return
(
char
*)(src+i);
108
}
109
//=========================================================//
110
char
*
strrchr
(
const
char
* src,
int
ch)
111
{
112
int
len=
strlen
(src);
113
int
i=0;
114
while
(i<len&&(*(src+len-i)!=ch)) i++;
115
return
(
char
*)(src+(len-i));
116
}
117
//=========================================================//
118
char
*
strstr
(
const
char
* src,
const
char
* sub)
119
{
120
if
(src&&sub)
121
{
122
int
subLen=
strlen
(sub);
123
int
srcLen=
strlen
(src);
124
int
nomatch=1;
125
int
fds=srcLen-subLen+1;
126
int
i=0;
127
if
(fds>0)
//find counts in the string
128
while
((nomatch=
strncmp
(src+i,sub,subLen))&&fds--)
//把当前src的指针往后推,直到找到与sub指针相同为止
129
i++;
130
if
(nomatch)
131
return
0;
132
else
133
return
(
char
*)(src+i);
134
}
135
return
0;
136
}
137
//====================memory operate=====================================//
138
//====================memory operate=====================================//
139
void
*
memcpy
(
void
* dest,
const
void
* src,unsigned
int
size)
140
{
141
if
(dest&&src&&size>0)
142
{
143
int
i=0;
144
unsigned
char
* p=(unsigned
char
*)dest;
145
unsigned
char
* q=(unsigned
char
*)src;
146
while
((i<size)&&(*(p+i)=*(q+i)))
147
i++;
148
return
dest;
149
}
150
return
0;
151
}
152
//=========================================================//
153
void
*
memset
(
void
* dst,
int
ch, unsigned
int
size)
154
{
155
int
i=0;
156
unsigned
char
* p=(unsigned
char
*)dst;
157
while
((i<size)&&(*(p+i)=ch))
158
i++;
159
return
dst;
160
}
161
//=========================================================//
162
int
memcmp
(
const
void
* src1,
const
void
* src2, unsigned
int
size)
163
{
164
}
165
//=========================================================//
166
void
*
memchr
(
const
void
* dst,
int
ch, unsigned
int
size)
167
{
168
}
169
void
*
memmove
(
void
* dst,
const
void
* src, unsigned
int
count)
170
{
171
void
* ret = dst;
172
if
(dst <= src || (
char
*)dst >= ((
char
*)src + count))
173
{
174
while
(count--)
175
{
176
*(
char
*)dst = *(
char
*)src;
177
dst = (
char
*)dst + 1;
178
src = (
char
*)src + 1;
179
}
180
}
181
else
182
{
183
dst = (
char
*)dst + count - 1;
184
src = (
char
*)src + count - 1;
185
while
(count--)
186
{
187
*(
char
*)dst = *(
char
*)src;
188
dst = (
char
*)dst - 1;
189
src = (
char
*)src - 1;
190
}
191
}
192
return
(ret);
193
}
转自: http://www.yqshare.com/string-h-fuction.html
- 手动实现的C语言string.h 头文件的字符串函数
- 自己实现的C语言string.h 头文件的字符串函数与几个内存操作函数
- C语言笔记——头文件string.h中内置的常用字符串操作函数
- C语言string.h头文件函数
- C语言中string.h头文件中函数详解
- string.h头文件的部分函数
- c语言string.h中常用的字符串操作函数
- C语言标准库string.h中常用的字符串函数的实现
- 转:C语言头文件下包含函数(math.h stdio.h stdlib.h string.h)
- C语言 string.h 中函数的实现
- string.h 或 cstring 头文件包含的字符串操纵函数查询
- (C语言)头文件实现的函数
- 有关string.h头文件的常用函数
- c++ 头文件<cstring>(或者string.h)中的常见函数的实现!
- C语言中自带的头文件(.h)所包含的函数
- C语言中自带的头文件(.h)所包含的函数
- C语言中自带的头文件(.h)所包含的函数
- C语言中自带的头文件(.h)所包含的函数
- Google Code SVN误操作!悲剧啊!!!
- log4net 详解
- 如何避免使用SELECTTOP10语句导致输出结果超过10个
- 学技术,永远没有止境
- 学习资料
- 手动实现的C语言string.h 头文件的字符串函数
- 修改Linux计算机名的方法
- 管理者的困境-放权或者崩溃
- GetClassLoader和GetCallerClass的使用
- 替换的代码,在过滤敏感的词有用
- dwr带简单参数及返回值,弹窗修改页面,不刷新页面下添加数据
- 单例模式(singleton)
- 分享一个记录当前代码信息的函数
- 3.14-3.17