C语言字符串函数汇总

转载 2007年09月20日 11:14:00
 1 /*
2  *  linux/lib/string.c
3  *
4  *  Copyright (C) 1991, 1992  Linus Torvalds
5  */
6
7 /*
8  * stupid library routines.. The optimized versions should generally be found
9  * as inline code in <asm-xx/string.h>
10  *
11  * These are buggy as well..
12  */
13  
14 #include <linux/types.h>
15
16 char * ___strtok = NULL;
17
18 char * strcpy(char * dest,const char *src)
19 {
20         char *tmp = dest;
21
22         while ((*dest++ = *src++) != '/0')
23                 /* nothing */;
24         return tmp;
25 }

26
27 char * strncpy(char * dest,const char *src,size_t count)
28 {
29         char *tmp = dest;
30
31         while (count-- && (*dest++ = *src++) != '/0')
32                 /* nothing */;
33
34         return tmp;
35 }
36
37 char * strcat(char * dest, const char * src)
38 {
39         char *tmp = dest;
40
41         while (*dest)
42                 dest++;
43         while ((*dest++ = *src++) != '/0')
44                 ;
45
46         return tmp;
47 }

48
49 char * strncat(char *dest, const char *src, size_t count)
50 {
51         char *tmp = dest;
52
53         if (count) {
54                 while (*dest)
55                         dest++;
56                 while ((*dest++ = *src++)) {
57                         if (--count == 0)
58                                 break;
59                 }
60         }
61
62         return tmp;
63 }
64
65 int strcmp(const char * cs,const char * ct)
66 {
67         register signed char __res;
68
69         while (1) {
70                 if ((__res = *cs - *ct++) != 0 || !*cs++)
71                         break;
72         }
73
74         return __res;
75 }
76
77 int strncmp(const char * cs,const char * ct,size_t count)
78 {
79         register signed char __res = 0;
80
81         while (count) {
82                 if ((__res = *cs - *ct++) != 0 || !*cs++)
83                         break;
84                 count--;
85         }
86
87         return __res;
88 }
89
90 char * strchr(const char * s,char c)
91 {
92         for(; *s != c; ++s)
93                 if (*s == '/0')
94                         return NULL;
95         return (char *) s;
96 }
97
98 size_t strlen(const char * s)
99 {
100         const char *sc;
101
102         for (sc = s; *sc != '/0'; ++sc)
103                 /* nothing */;
104         return sc - s;
105 }
106
107 size_t strnlen(const char * s, size_t count)
108 {
109         const char *sc;
110
111         for (sc = s; *sc != '/0' && count--; ++sc)
112                 /* nothing */;
113         return sc - s;
114 }
115
116 size_t strspn(const char *s, const char *accept)
117 {
118         const char *p;
119         const char *a;
120         size_t count = 0;
121
122         for (p = s; *p != '/0'; ++p) {
123                 for (a = accept; *a != '/0'; ++a) {
124                         if (*p == *a)
125                                 break;
126                 }
127                 if (*a == '/0')
128                         return count;
129                 ++count;
130         }
131
132         return count;
133 }
134
135 char * strpbrk(const char * cs,const char * ct)
136 {
137         const char *sc1,*sc2;
138
139         for( sc1 = cs; *sc1 != '/0'; ++sc1) {
140                 for( sc2 = ct; *sc2 != '/0'; ++sc2) {
141                         if (*sc1 == *sc2)
142                                 return (char *) sc1;
143                 }
144         }
145         return NULL;
146 }
147
148 char * strtok(char * s,const char * ct)
149 {
150         char *sbegin, *send;
151
152         sbegin  = s ? s : ___strtok;
153         if (!sbegin) {
154                 return NULL;
155         }
156         sbegin += strspn(sbegin,ct);
157         if (*sbegin == '/0') {
158                 ___strtok = NULL;
159                 return( NULL );
160         }
161         send = strpbrk( sbegin, ct);
162         if (send && *send != '/0')
163                 *send++ = '/0';
164         ___strtok = send;
165         return (sbegin);
166 }
167
168 void * memset(void * s,char c,size_t count)
169 {
170         char *xs = (char *) s;
171
172         while (count--)
173                 *xs++ = c;
174
175         return s;
176 }
177
178 char * bcopy(const char * src, char * dest, int count)
179 {
180         char *tmp = dest;
181
182         while (count--)
183                 *tmp++ = *src++;
184
185         return dest;
186 }
187
188 void * memcpy(void * dest,const void *src,size_t count)
189 {
190         char *tmp = (char *) dest, *s = (char *) src;
191
192         while (count--)
193                 *tmp++ = *s++;
194
195         return dest;
196 }
197
198 void * memmove(void * dest,const void *src,size_t count)
199 {
200         char *tmp, *s;
201
202         if (dest <= src) {
203                 tmp = (char *) dest;
204                 s = (char *) src;
205                 while (count--)
206                         *tmp++ = *s++;
207                 }
208         else {
209                 tmp = (char *) dest + count;
210                 s = (char *) src + count;
211                 while (count--)
212                         *--tmp = *--s;
213                 }
214
215         return dest;
216 }
217
218 int memcmp(const void * cs,const void * ct,size_t count)
219 {
220         const unsigned char *su1, *su2;
221         signed char res = 0;
222
223         for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
224                 if ((res = *su1 - *su2) != 0)
225                         break;
226         return res;
227 }
228
229 /*
230  * find the first occurrence of byte 'c', or 1 past the area if none
231  */
232 void * memscan(void * addr, unsigned char c, size_t size)
233 {
234         unsigned char * p = (unsigned char *) addr;
235
236         while (size) {
237                 if (*p == c)
238                         return (void *) p;
239                 p++;
240                 size--;
241         }
242         return (void *) p;
243 }

C语言常用字符串处理函数(一)

C语言常用字符串处理函数(一) 我们经常会遇到要用C语言来直接处理字符串,了解这些函数,编写起代码来能够事半功倍,这也是字符串处理的基础。...
  • junyucsdn
  • junyucsdn
  • 2016年02月28日 11:51
  • 1366

C语言中的复制函数(strcpy和memcpy)

PS:初学算法,开始刷leetcode,Rotate array的预备知识(写的算法Time Limit Exceed)于是百度高效算法,本篇讲述预备知识。 1、strcpy和strncpy函数 ...
  • u011391629
  • u011391629
  • 2016年05月14日 17:15
  • 20130

C语言字符串截取函数strtok和strtok_r

在看源码的时候需要将一段并排的IPs转化成为一系列的IP,将"10.0.0.1;10.0.0.2;10.0.0.3;10.0.0.4;10.0.0.5"转换成为单独的"10.0.0.1","10.0....
  • lavorange
  • lavorange
  • 2015年07月29日 21:42
  • 5404

c语言的split字符串分割函数strtok的使用

c语言也有类似其他语言的split字符串分割函数,就是strtok 使用方法如下: //用逗号做分隔符,读出内容 // char s[] = "123-sldkf-123ls-343434-dfjdl...
  • yihui8
  • yihui8
  • 2017年01月12日 10:31
  • 4299

C语言字符串输入函数的比较与解析

在做ACM题时经常会被一些字符串输入搞得
  • JZQT_T
  • JZQT_T
  • 2014年07月31日 15:32
  • 2574

C语言的字符串查找函数

C/C++字符串查找函数 C/C++ string库(string.h)提供了几个字符串查找函数,如下: memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定...
  • haiross
  • haiross
  • 2015年05月15日 16:10
  • 5700

用C语言实现字符串反转函数strrev的经典方法

用C语言实现字符串反转函数strrev的经典方法 分类: 玄之又玄代码空间 2012-10-29 15:59 6621人阅读 评论(7) 收藏 举报 C语言c语言strrev字符串反转 字符...
  • haiross
  • haiross
  • 2015年05月25日 11:02
  • 1478

c语言字符串 数字转换函数大全

atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) s...
  • andylauren
  • andylauren
  • 2016年08月20日 09:54
  • 2005

C语言的字符串输入gets()函数

C语言的字符串输入gets()函数 字符串简介字符串(character string)是一个或多个字符的序列。如下所示:"Zing went the strings of my heart!"...
  • libing403
  • libing403
  • 2017年06月11日 00:09
  • 1369

C语言读取字符串,并对字符串排序

#include #include #define SIZE 81 //每行的字符长度限制 #define LIM 20 //最多读取行数 #define HALT " " //用空...
  • Naploen8
  • Naploen8
  • 2014年04月12日 12:23
  • 3260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言字符串函数汇总
举报原因:
原因补充:

(最多只允许输入30个字)