C语言string.h文件函数汇总详解

注:下列例程执行结果由VC++6.0环境编译运行。

一、常用函数

1.strcpy

函数原型:char *strcpy(char *destin, char *source);
函数功能:把含有’\0’结束符的字符串source(包含’\0’)复制到另一个地址空间destin。

使用例程:

#include<stdio.h>
#include<string.h>
 
int main(void)
{
    
    
	char string[10]={
    
    0};
	char*str1="abcdefghi";
	 
	strcpy(string,str1);
	 
	printf("%s\n",string);
	 
	return 0;
}

结果:
在这里插入图片描述

2.strncpy

函数原型:char *strncpy(char *dest, char *src,size_tn);
函数功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才停止复制),返回指向dest的指针。

使用例程:

#include<stdio.h>
#include<string.h>
 
int main(void)
{
    
    
	char string[10]={
    
    0};
	char*str1="abcdefghi";
	 
	strncpy(string,str1,3);
	 
	printf("%s\n",string);
	 
	return 0;
}

结果:
在这里插入图片描述

3.strstr

函数原型:char *strstr(char *str1, char *str2);
函数功能:找出str2字符串在str1字符串中第一次出现的位置(不包括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;
}

结果:
在这里插入图片描述

4.strcmp

函数原型:int strcmp(char * str1,char * str2);
函数功能:比较两个字符串str1,str2
返回值:str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数
使用例程:

int main()
{
    
    

    char dest[10]="abcd";
    char *src="a23456";
    char d2[8]="abcd";
    int res;
    res=strcmp(dest, src);
    printf("res= %d \n", res);
    res=strcmp(dest, d2);
    printf("res= %d \n", res);

    return 0;
}

结果:
在这里插入图片描述

5.strncmp

函数原型:int strncmp(char *str1,char *str2,int count)
函数功能:对str1和str2中的前count个字符按字典顺序比较
返回值:小于0:str1<str2,等于0:str1=str2,大于0:str1>str2
使用例程:

int main()
{
    
    

    char dest[10]="abcd";
    char *src="a23456";
    char d2[8]="abcd";
    int res;
    res=strncmp(dest, src, 3);
    printf("res= %d \n", res);
    res=strncmp(dest, d2, 3);
    printf("res= %d \n", res);

    return 0;
}

结果:
在这里插入图片描述

6.strchr

函数原型:char* strchr(char* str,char ch);
函数功能:找出str指向的字符串中第一次出现字符ch的位置
返回值:返回指向该位置的指针,如找不到,则返回空指针
使用例程:

int main()
{
    
    

    char dest[10]="abcd";
    char* rp;
    char ch= 'c';
    rp=strchr(dest, ch);
    if(NULL == rp)
        printf("no %c exist", ch);
    else
        printf("pos of %c is %d\n", ch, (int)(rp-dest+1));

    return 0;
}

结果:
在这里插入图片描述

7.strlen

函数原型:size_t strlen ( const char *s);
函数功能:计算字符串s的(unsigned int型)长度,不包括’\0’在内
返回值:s的长度,不包括’\0’在内
使用例程:

#include<stdio.h>
#include <string.h>

int main(void)
{
    
    
	int i=0;
	char *he = "Hello,world";
	i= strlen (he);
	printf ( "字符串长度为%d\n" ,i);
	return 0;
}

结果:
在这里插入图片描述

8.strcat

函数原型:char* strcat(char * str1,char * str2);
函数功能:把字符串str2接到str1后面,str1最后的’\0’被取消

使用例程:

#include<stdio.h>
#include <string.h>

int main(void)
{
    
    
    char dest[5]="abcd";
    char *src="123456";
    strcat(dest, src);
    printf("dest= %s\n", dest);

    return 0;
}

结果:
在这里插入图片描述

9.strncat

函数原型:char *strncat(char *dest, const char *src, size_t maxlen)
函数功能:将字符串src中前maxlen个字符连接到dest中
使用例程:

#include<stdio.h>
#include <string.h>

int main()
{
    
    
    char dest[10]="abcd";
    char *src="123456";
    strncat(dest, src, 3);
    printf("dest= %s\n", dest);

    return 0;
}

结果:
在这里插入图片描述

10.memcpy

函数原型:void *memcpy(void *dest, const void *src, size_t n)
函数功能:内存拷贝
函数返回:指向dest的指针

使用例程:

#include<stdio.h>
#include<string.h>
int main()
{
    
    
  char src[]="******************************";
  char dest[]="abcdefghijlkmnopqrstuvwxyz0123456709";
  char *ptr=NULL;
  printf("destination before memcpy:%s\n",dest);
  ptr=memcpy(dest,src,strlen(src));
  if (ptr)
    printf("destination after memcpy:%s\n",dest);
  else
    printf("memcpy failed");
  return 0;
}

结果:
在这里插入图片描述

11.memset

函数原型:void *memset(void *s, int c, size_t n)
函数功能:字符串中的n个字节内容设置为c
函数返回:指向dest的指针

使用例程:

#include<stdio.h>
#include<string.h>
int main()
{
    
    
  char buffer[]="Hello world";
  printf("Buffer before memset:%s\n",buffer);
  memset(buffer,'*',strlen(buffer)-1);
  printf("Buffer after memset:%s\n",buffer);
  return 0;
}

结果:
在这里插入图片描述

12.memcmp

函数原型:int memcmp(const void *buf1, const void *buf2, size_t n);
函数功能:比较内存区域buf1和buf2的前n个字节。
函数返回:
如果返回值 < 0,则表示 str1 小于 str2。
如果返回值 > 0,则表示 str2 小于 str1。
如果返回值 = 0,则表示 str1 等于 str2。

#include<string.h>
#include<stdio.h>
int main()
{
    
    
	char *s1 = "Hello,Programmers!";
	char *s2 = "Hello,Programmers!";
	int r;
	r = memcmp(s1,s2,strlen(s1));
	if(!r)
	    printf("s1 and s2 are identical\n");/*s1等于s2*/
	elseif(r<0)
	    printf("s1 is less than s2\n");/*s1小于s2*/
	else
	    printf("s1 is greater than s2\n");/*s1大于s2*/
	return 0;
}

在这里插入图片描述

二、不常用函数

1.strnset

函数原型:char *strnset(char *s, int ch, size_t n)
函数功能:将字符串s中前n个字符设置为ch的值
返回值:指向s的指针
使用例程:

int main()
{
    
    
    char dest[10]="abcdabc";
    char* rp;
    char ch= 'F';
    rp=strnset(dest, ch, 4);
    printf("after strnset dest is %s \n", rp);

    return 0;
}

结果:
在这里插入图片描述

2.strset

函数原型:char *strset(char *s, int ch)
函数功能:将字符串s中所有字符设置为ch的值
返回值:指向s的指针
使用例程:

int main()
{
    
    
    char dest[10]="abcdabc";
    char* rp;
    char ch= 'F';
    rp=strset(dest, ch);
    printf("after strnset dest is %s \n", rp);
    printf("after strnset dest is %s \n", dest);
    return 0;
}

在这里插入图片描述

3.strtok

函数原型:char *strtok(char *s1, const char *s2)
函数功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串
返回值:字符串s1中首次出现s2中的字符前的子字符串指针
strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。
使用例程:

int main()
{
    
    
    char dest[]="ab,cd,ef,c";
    char* rp;
    char ch[]= ",";
    rp=strtok(dest, ch);
    while(NULL != rp)
    {
    
    
        printf("dest: %s ", dest);
        printf("rp: %s \n", rp);
        rp=strtok(NULL, ch);
    }

    return 0;
}

在这里插入图片描述
说明:尽量使用可重入版的strtok,Windows平台下为strtok_s,Linux平台下为strtok_r。
牢记strtok函数族的分隔规则:忽略字符串前后的分隔符,连续的分隔符被当做一个处理。
在使用strtok前,请对源字符串进行备份,除非你可以接受字符串被修改这一事实(修改为分隔的第一个字符串)。

4.strupr

函数原型:char *strupr(char *s)
函数功能:将字符串s中的小写字母变为大写字母

使用例程:

int main()
{
    
    
    char dest[]="ab,cd,EF,c";
    char* rp;
    rp=strupr(dest);
    printf("dest: %s, rp: %s", dest, rp);

    return 0;
}

结果:
在这里插入图片描述
注:原字符串dest 也被修改!!,对符号和大写字符无影响。

5.strlwr

函数原型:char *strlwr(char *s)
函数功能:将字符串s中的大写字母变为小写字母
使用例程:

int main()
{
    
    
    char dest[]="ab,cd,EF,c";
    char* rp;
    rp=strlwr(dest);
    printf("dest: %s, rp: %s", dest, rp);

    return 0;
}

结果:
在这里插入图片描述

6.strrchr

函数原型:char *strrchr(const char *s, int c)
函数功能:得到字符串s中最后一个含有c字符的位置指针
返回值:位置指针

使用例程:

int main()
{
    
    
    char dest[10]="abcdabc";
    char* rp;
    char ch= 'c';
    rp=strrchr(dest, ch);
    if(NULL == rp)
        printf("no %c exist", ch);
    else
        printf("pos of %c is %d", ch, (int)(rp-dest+1));

    return 0;
}

结果:
在这里插入图片描述

7.strtol

函数原型:long strtol(char *str, char **endptr, int base);
函数功能:将串转换为长整数
返回值:结果
示例:

#include<stdlib.h>
#include<stdio.h>
int main(void)
{
    
    
	char*string="87654321",*endptr;
	long lnumber;
	
	lnumber=strtol(string,&endptr,10);
	printf("string=%s\nlong=%ld\n",string,lnumber);
	return 0;
}

结果;
在这里插入图片描述

8.strtod

函数原型:double strtod(char *str, char **endptr);
函数功能:将字符串转换为double型值
返回值:

示例:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    
    
	char* input="5.45",*endptr;
	double value;

	value=strtod(input,&endptr);
	printf("Thestringis%s\nthenumberis%lf\n",input,value);
	return 0;
}

结果:
在这里插入图片描述

9.strrev

函数原型: char *strrev(char *s)
函数功能: 将字符串中的所有字符颠倒次序排列
函数返回: 指向s的指针

示例:

#include<stdio.h>
#include<string.h>
int main(void)
{
    
    
  char forward[]="string";
  printf("Before strrev():%s\n",forward);
  strrev(forward);
  printf("After strrev():%s\n",forward);
  return 0;
}

在这里插入图片描述

10.待续

猜你喜欢

转载自blog.csdn.net/weixin_44788542/article/details/113742342