整理:<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 :

Concatenation :

Comparison :

Searching :

Other :

Macros


Types



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");
	  else
		  printf("buffer 2 is less than buffer 1\n");
	  ptr = strcmp(buf2, buf3);
	  if (ptr > 0)
		  printf("buffer 2 is greater than buffer 3\n");
	  else
		  printf("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");
	  else
		  printf("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");
	  else
		  printf("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);
	  else
		  printf("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);
	  else
		  printf("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 terminator
		  in front of the token, if found */
		p = strtok(input, ",");
	  if (p) 
			printf("%s\n", p);
	  /* A second call to strtok using a NULL
	    as the first parameter returns a pointer
	    to 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

http://blog.csdn.net/zhubin215130/article/details/8993403


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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值