cstring (string.h)"/>
整理:cstring (string.h)
string.h 头定义了一个变量的类型,操作字符数组的一个宏观和各种功能。
库变量
以下是在头string.h中定义的变量类型:
S.N. | 变量和说明 |
---|---|
1 | size_t 这是一个无符号整数类型的sizeof关键字的结果。 |
库宏
以下是在头string.h中定义的宏:
S.N. | 宏观与说明 |
---|---|
1 | NULL 这个宏是一个空指针常量的值。 |
库函数
以下是头string.h中定义的功能:
S.N. | 函数及说明 |
---|---|
1 | void *memchr(const void *str, int c, size_t n) 搜索第一次出现的字符c(unsigned char类型)的前n个字节的字符串参数str指向。 |
2 | int memcmp(const void *str1, const void *str2, size_t n) 比较str1和str2的前n个字节。 |
3 | void *memcpy(void *dest, const void *src, size_t n) 从src复制n个字符到dest。 |
4 | void *memmove(void *dest, const void *src, size_t n) 另一个函数来复制n个字符到str1。 |
5 | void *memset(void *str, int c, size_t n) 复制字符c(unsigned char类型)的前n个字符的字符串参数str指向。 |
6 | char *strcat(char *dest, const char *src) 追加src指向的字符串到dest指向的字符串的结束。 |
7 | char *strncat(char *dest, const char *src, size_t n) 追加src指向字符串结尾的字符串指向dest中最多n个字符长。 |
8 | char *strchr(const char *str, int c) 搜索第一次出现的字符串中的字符c(unsigned char类型)参数str指向。 |
9 | int strcmp(const char *str1, const char *str2) 比较字符串str1指向指向的字符串str2。 |
10 | int strncmp(const char *str1, const char *str2, size_t n) str1和str2的前n个字节相比。 |
11 | int strcoll(const char *str1, const char *str2) 比较字符串str1的STR2。其结果是依赖于位置LC_COLLATE设置。 |
12 | char *strcpy(char *dest, const char *src) 复制字符串src指向到dest。 |
13 | char *strncpy(char *dest, const char *src, size_t n) 副本最多n个字符的字符串src指向到dest。 |
14 | size_t strcspn(const char *str1, const char *str2) 计算str1的起始段的长度完全包含在str2中的字符。 |
15 | char *strerror(int errnum) 搜索一个内部数组的错误编号差错编号,并返回一个指向一个错误消息字符串。 |
16 | size_t strlen(const char *str) 计算但不包括终止空字符的字符串str的长度。 |
17 | char *strpbrk(const char *str1, const char *str2) 查找字符串str1在str2中指定的任何字符相匹配的第一个字符。 |
18 | char *strrchr(const char *str, int c) 参数str指向的字符串中的字符c(unsigned char类型)最后一次出现的搜索。 |
19 | size_t strspn(const char *str1, const char *str2) 计算str1中的初始段完全包含在str2中的字符的长度。 |
20 | char *strstr(const char *haystack, const char *needle) 查找第一次出现的整个字符串针(不包括终止空字符)出现在字符串haystack中。 |
21 | char *strtok(char *str, const char *delim) 中断字符串str分隔分离成一系列的记号。 |
22 | size_t strxfrm(char *dest, const char *src, size_t n) 转换前n个字符的字符串src到校报的语言环境和将它们放置字符串dest。 |
<cstring> (string.h)
C Strings This header file defines several functions to manipulate C strings and arrays.Functions
Copying :- memcpy
- Copy block of memory (function )
- memmove
- Move block of memory (function )
- strcpy
- Copy string (function )
- strncpy
- Copy characters from string (function )
Concatenation :
- strcat
- Concatenate strings (function )
- strncat
- Append characters from string (function )
Comparison :
- memcmp
- Compare two blocks of memory (function )
- strcmp
- Compare two strings (function )
- strcoll
- Compare two strings using locale (function )
- strncmp
- Compare characters of two strings (function )
- strxfrm
- Transform string using locale (function )
Searching :
- memchr
- Locate character in block of memory (function )
- strchr
- Locate first occurrence of character in string (function )
- strcspn
- Get span until character in string (function )
- strpbrk
- Locate characters in string (function )
- strrchr
- Locate last occurrence of character in string (function )
- strspn
- Get span of character set in string (function )
- strstr
- Locate substring (function )
- strtok
- Split string into tokens (function )
Other :
- memset
- Fill block of memory (function )
- strerror
- Get pointer to error message string (function )
- strlen
- Get string length (function )
Macros
- NULL
- Null pointer (macro )
Types
- size_t
- Unsigned integral type (type )
string.h文件中函数的详细用法
下面为string.h文件中函数的详细用法,附加实例:1、strcpy
函数名: strcpy
功 能: 拷贝一个字符串到另一个
用 法: char *strcpy(char *destin, char *source);
程序例:
#include <stdio.h>#include <string.h>int main(void){char string[10];char *str1 = "abcdefghi";strcpy(string, str1);printf("%s\n", string);return 0;}
2、strcat
函数名: strcat
功 能: 字符串拼接函数
用 法: char *strcat(char *destin, char *source);
程序例:
<pre name="code" class="cpp"> #include <string.h>#include <stdio.h>int main(void){char destination[25];char *blank = " ", *c = "C++", *Borland = "Borland";strcpy(destination, Borland);strcat(destination, blank);strcat(destination, c);printf("%s\n", destination);return 0;}
3、strchr 函数名: strchr 功 能: 在一个串中查找给定字符的第一个匹配之处\ 用 法: char *strchr(char *str, char c); 程序例:
#include <string.h>#include <stdio.h>int main(void){
<span style="white-space:pre"> </span> char string[15];
<span style="white-space:pre"> </span> char *ptr, c = 'r';
<span style="white-space:pre"> </span> strcpy(string, "This is a string");
<span style="white-space:pre"> </span> ptr = strchr(string, c);
<span style="white-space:pre"> </span> if (ptr)
<span style="white-space:pre"> </span> printf("The character %c is at position: %d\n", c, ptr-string);
<span style="white-space:pre"> </span> else
<span style="white-space:pre"> </span> printf("The character was not found\n");
<span style="white-space:pre"> </span> return 0;
<span style="white-space:pre"> </span>}
4、strcmp
函数名: strcmp
功 能: 串比较
用 法: int strcmp(char *str1, char *str2);
看Asic码,str1>str2,返回值 > 0;两串相等,返回0
程序例:
#include <string.h>#include <stdio.h>int main(void){char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";int ptr;ptr = strcmp(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");elseprintf("buffer 2 is less than buffer 1\n");ptr = strcmp(buf2, buf3);if (ptr > 0)printf("buffer 2 is greater than buffer 3\n");elseprintf("buffer 2 is less than buffer 3\n");return 0;}
5、strncmpi
函数名: strncmpi
功 能: 将一个串中的一部分与另一个串比较, 不管大小写
用 法: int strncmpi(char *str1, char *str2, unsigned maxlen);
程序例:
#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBB", *buf2 = "bbb";int ptr;ptr = strcmpi(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}
6、strcpy
函数名: strcpy
功 能: 串拷贝
用 法: char *strcpy(char *str1, char *str2);
程序例:
#include <stdio.h>#include <string.h>int main(void){char string[10];char *str1 = "abcdefghi";strcpy(string, str1);printf("%s\n", string);return 0;}
7、strcspn
函数名: strcspn
功 能: 在串中查找第一个给定字符集内容的段
用 法: int strcspn(char *str1, char *str2);
程序例:
#include <stdio.h>#include <string.h>#include <alloc.h>int main(void){char *string1 = "1234567890";char *string2 = "747DC8";int length;length = strcspn(string1, string2);printf("Character where strings intersect is at position %d\n", length);return 0;}
8、strdup
函数名: strdup
功 能: 将串拷贝到新建的位置处
用 法: char *strdup(char *str);
程序例:
#include <stdio.h>#include <string.h>#include <alloc.h>int main(void){char *dup_str, *string = "abcde";dup_str = strdup(string);printf("%s\n", dup_str);free(dup_str);return 0;}
9、stricmp
函数名: stricmp
功 能: 以大小写不敏感方式比较两个串
用 法: int stricmp(char *str1, char *str2);
程序例:
#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBB", *buf2 = "bbb";int ptr;ptr = stricmp(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}
10、strerror
函数名: strerror
功 能: 返回指向错误信息字符串的指针
用 法: char *strerror(int errnum);
程序例:
#include <stdio.h>#include <errno.h>int main(void){char *buffer;buffer = strerror(errno);printf("Error: %s\n", buffer);return 0;
<span style="white-space:pre"> </span>}
11、strcmpi
函数名: strcmpi
功 能: 将一个串与另一个比较, 不管大小写
用 法: int strcmpi(char *str1, char *str2);
程序例:
#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBB", *buf2 = "bbb";int ptr;ptr = strcmpi(buf2, buf1);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}
函数名: strncmp
功 能: 串比较
用 法: int strncmp(char *str1, char *str2, int maxlen);
程序例:
#include <string.h>#include <stdio.h>int main(void){char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";int ptr;ptr = strncmp(buf2,buf1,3);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");elseprintf("buffer 2 is less than buffer 1\n");ptr = strncmp(buf2,buf3,3);if (ptr > 0)printf("buffer 2 is greater than buffer 3\n");elseprintf("buffer 2 is less than buffer 3\n");return(0);}
12、strncpy
函数名: strncpy
功 能: 串拷贝
用 法: char *strncpy(char *destin, char *source, int maxlen);
程序例:
#include <stdio.h>#include <string.h>int main(void){char string[10];char *str1 = "abcdefghi";strncpy(string, str1, 3);string[3] = '\0';printf("%s\n", string);return 0;}
13、strnicmp
函数名: strnicmp
功 能: 不注重大小写地比较两个串
用 法: int strnicmp(char *str1, char *str2, unsigned maxlen);
程序例:
#include <string.h>#include <stdio.h>int main(void){char *buf1 = "BBBccc", *buf2 = "bbbccc";int ptr;ptr = strnicmp(buf2, buf1, 3);if (ptr > 0)printf("buffer 2 is greater than buffer 1\n");if (ptr < 0)printf("buffer 2 is less than buffer 1\n");if (ptr == 0)printf("buffer 2 equals buffer 1\n");return 0;}
14、strnset
函数名: strnset
功 能: 将一个字符串前n个字符都设为指定字符
用 法: char *strnset(char *str, char ch, unsigned n);
程序例:
#include <stdio.h>#include <string.h>int main(void){char *string = "abcdefghijklmnopqrstuvwxyz";char letter = 'x';printf("string before strnset: %s\n", string);strnset(string, letter, 13);printf("string after strnset: %s\n", string);return 0;}
15、strpbrk
函数名: strpbrk
功 能: 在串中查找给定字符集中的字符
用 法: char *strpbrk(char *str1, char *str2);
程序例:
#include <stdio.h>#include <string.h>int main(void){char *string1 = "abcdefghijklmnopqrstuvwxyz";char *string2 = "onm";char *ptr;ptr = strpbrk(string1, string2);if (ptr)printf("strpbrk found first character: %c\n", *ptr);elseprintf("strpbrk didn't find character in set\n");return 0;}
16、strrchr
函数名: strrchr
功 能: 在串中查找指定字符的最后一个出现
用 法: char *strrchr(char *str, char c);
程序例:
#include <string.h>#include <stdio.h>int main(void){char string[15];char *ptr, c = 'r';strcpy(string, "This is a string");ptr = strrchr(string, c);if (ptr)printf("The character %c is at position: %d\n", c, ptr-string);elseprintf("The character was not found\n");return 0;}
17、strrev
函数名: strrev
功 能: 串倒转
用 法: char *strrev(char *str);
程序例:
#include <string.h>#include <stdio.h>int main(void){char *forward = "string";printf("Before strrev(): %s\n", forward);strrev(forward);printf("After strrev(): %s\n", forward);return 0;}
18、strset
函数名: strset
功 能: 将一个串中的所有字符都设为指定字符
用 法: char *strset(char *str, char c);
程序例:
#include <stdio.h>#include <string.h>int main(void){char string[10] = "123456789";char symbol = 'c';printf("Before strset(): %s\n", string);strset(string, symbol);printf("After strset(): %s\n", string);return 0;}
19、strspn
函数名: strspn
功 能: 在串中查找指定字符集的子集的第一次出现
用 法: int strspn(char *str1, char *str2);
程序例:
#include <stdio.h>#include <string.h>#include <alloc.h>int main(void){char *string1 = "1234567890";char *string2 = "123DC8";int length;length = strspn(string1, string2);printf("Character where strings differ is at position %d\n", length);return 0;}
20、strstr
函数名: strstr
功 能: 在串中查找指定字符串的第一次出现
用 法: char *strstr(char *str1, char *str2);
程序例:
#include <stdio.h>#include <string.h>int main(void){char *str1 = "Borland International", *str2 = "nation", *ptr;ptr = strstr(str1, str2);printf("The substring is: %s\n", ptr);return 0;}
21、strtod
函数名: strtod
功 能: 将字符串转换为double型值
用 法: double strtod(char *str, char **endptr);
程序例:
#include <stdio.h>#include <stdlib.h>int main(void){char input[80], *endptr;double value;printf("Enter a floating point number:");gets(input);value = strtod(input, &endptr);printf("The string is %s the number is %lf\n", input, value);return 0;}
22、strtok
函数名: strtok
功 能: 查找由在第二个串中指定的分界符分隔开的单词
用 法: char *strtok(char *str1, char *str2);
程序例:
#include <string.h>#include <stdio.h>int main(void){char input[16] = "abc,d";char *p;/* strtok places a NULL terminatorin front of the token, if found */p = strtok(input, ",");if (p) printf("%s\n", p);/* A second call to strtok using a NULLas the first parameter returns a pointerto the character following the token */p = strtok(NULL, ",");if (p) printf("%s\n", p);return 0;}
23、strtol
函数名: strtol
功 能: 将串转换为长整数
用 法: long strtol(char *str, char **endptr, int base);
程序例:
#include <stdlib.h>#include <stdio.h>int main(void){char *string = "87654321", *endptr;long lnumber;/* strtol converts string to long integer */lnumber = strtol(string, &endptr, 10);printf("string = %s long = %ld\n", string, lnumber);return 0;}
24、strupr
函数名: strupr
功 能: 将串中的小写字母转换为大写字母
用 法: char *strupr(char *str);
程序例:
#include <stdio.h>#include <string.h>int main(void){char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;/* converts string to upper case characters */ptr = strupr(string);printf("%s\n", ptr);return 0;}
25、swab
函数名: swab
功 能: 交换字节
用 法: void swab (char *from, char *to, int nbytes);
程序例:
#include <stdlib.h>#include <stdio.h>#include <string.h>char source[15] = "rFna koBlrna d";char target[15];int main(void){swab(source, target, strlen(source));printf("This is target: %s\n", target);return 0;}
原型:extern char *strstr(char *haystack, char *needle);
*所在头文件:#include <string.h>
*功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。
*说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。
评论:
#1楼 2016-03-18 19:38 好儿郎-志在四方
17、strrev函数名: strrev
功 能: 串倒转
用 法: char *strrev(char *str);
程序例:
#include <string.h>
#include <stdio.h>
int main(void)
{
char *forward = "string";
printf("Before strrev(): %s\n", forward);
strrev(forward);
printf("After strrev(): %s\n", forward);
return 0;
}
博主,这个可能有点问题吧,我查了C++的帮助文档,
Return Value:Each of these functions returns a pointer to the altered string. No return value is reserved to indicate an error.
也就是说strrev()函数返回翻转过后的字符串的指针,
我感觉这样使用更合适,
char forward[10] = "string";
char *strtemp;
strtemp=strrev(forward);
但是这样的话,就必须把 char *forward = "string";修改为char forward[10] = "string";我不明白为什么,还请楼主赐教
#2楼 2016-03-18 19:45 好儿郎-志在四方
找到了一个解释。#3楼 2016-03-18 20:07 好儿郎-志在四方
"string"是字符串常量,如果这样声明的话,char *forward = "string",那么forward 就是常量指针,而常量的值是不能改变的,所以。。。
#4楼 2016-07-14 20:32 酷灬killing
第五个里面的ptr = strcmpi(buf2, buf1);
这一句,函数少了个n
void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中.void *memmove( void* dest, const void* src,size_t count);
由src所指内存区域复制count个字节到dest所指内存区域。memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
void *memset(void *s, int ch, size_t n);
将s中前n个字节(typedef unsigned int size_t)用ch替换并返回s。memset作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法.
int memcmp(const void *buf1, const void *buf2, unsigned int count);
比较内存区域buf1和buf2的前count个字节。当buf1<buf2时,返回值<0
当buf1=buf2时,返回值=0
当buf1>buf2时,返回值>0
extern char *strcpy(char* dest, const char *src);
把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间.src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。char * strncpy(char *dest, char *src,size_t num);
复制src中的内容(字符,数字、汉字....)到dest,复制多少由num的值决定,返回指向dest的指针。如果遇到null字符('\0'),且还没有到num个字符时,就用(num - n)(n是遇到null字符前已经有的非null字符个数)个null字符附加到destination。extern char *strcat(char *dest,char *src);
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。extern char *strncat(char *dest,char *src,int n);
把src所指字符串的前n个字符添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。extern int strcmp(const char *s1,const char * s2);
比较字符串s1和s2。当s1<s2时,返回值<0
当s1==s2时,返回值=0
当s1>s2时,返回值>0
即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
int strncmp(char *str1, char *str2, int maxlen);
此函数功能即比较字符串str1和str2的前maxlen个字符。
如果前maxlen字节完全相等,返回值就=0;
在前maxlen字节比较过程中,如果出现str1[n]与str2[n]不等,则返回(str1[n]-str2[n])。
int strcasecmp (const char *s1, const char *s2);
strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。
若参数s1和s2字符串相等则返回0。
s1大于s2则返回大于0 的值。
s1 小于s2 则返回小于0的值。
int strncasecmp(const char *s1, const char *s2, size_t n)
strncasecmp()用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异,
若参数s1和s2字符串相同则返回0
s1若大于s2则返回大于0的值
s1若小于s2则返回小于0的值.
extern char *strchr(const char *s,char c);
查找字符串s中首次出现字符c的位置,返回首次出现c的位置的指针,如果s中不存在c则返回NULL。extern unsigned int strlen(char *s);
计算字符串s的(unsigned int型)长度,不包括'\0'在内.返回s的长度,不包括结束符NULL。更多推荐
整理:cstring (string.h)
发布评论