博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言string.h文件函数汇总详解
阅读量:539 次
发布时间:2019-03-08

本文共 8868 字,大约阅读时间需要 29 分钟。

注:下列例程执行结果由VC++6.0环境编译运行测试,确保验证无误。

目录

一、常用函数

1.strcpy

函数原型:char *strcpy(char *destin, char *source);

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

使用例程:

#include
#include
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
#include
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 
#include
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
#include
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
#include
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
#include
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
#include
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
#include
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
#include
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;}

在这里插入图片描述

例程提示:
dest:ab 只打印了ab后面就没打印了,是因为strtok(dest, ch); 使得dest数组内,ab后面的’,‘逗号被strtok函数换成了’\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);

函数功能:将串转换为长整型数
参数:
str是要转换的字符
enptr是指向第一个不可转换的字符位置的指针
base基数,范围从2至36,或特殊值0。
返回值:转换结果

注意点:

(1) 参数base代表采用的进制方式,如base值为10则采用10进制(字符串以10进制表示),若base值为16则采用16进制(字符串以16进制表示)。当base值为0时则默认采用10进制做转换,但遇到 ‘0x’ / ‘0X’ 前置字符则会使用 16 进制转换,遇到 ‘0’ 前置字符则会使用 8 进制转换。
(2) 若endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。

函数执行流程:一开始strtol()会扫描参数str字符串,跳过前面的空格(只能跳空格,字母不行),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的str中的字符指针由endptr返回;若参数endptr为NULL,则表示该参数无效,或不使用该参数。

示例1:

#include
#include
int main(void){
char*str1="87654321"; char*str2="-87654321"; char*str3="+87654321"; char*endptr; long lnumber; lnumber=strtol(str1,&endptr,10); printf("str1=%s\nlong=%ld\n",str1,lnumber); lnumber=strtol(str2,&endptr,10); printf("str2=%s\nlong=%ld\n",str2,lnumber); lnumber=strtol(str3,&endptr,10); printf("str3=%s\nlong=%ld\n",str3,lnumber); return 0;}

运行结果:

在这里插入图片描述
该示例注意点:
(1) strtol函数支持正负数的转换,可以在字符前加正负号也能顺利转换

示例2:

#include
#include
void test1(void){
char str[] = " 2030300 This is test"; char *ptr; long ret; ret = strtol(str, &ptr, 10); printf("数字(无符号长整数)是 %ld\n", ret); printf("字符串部分是 |%s|\n", ptr);}void test2(void){
char str[] = "abc2030300 This is test"; char *ptr; long ret; ret = strtol(str, &ptr, 10); printf("数字(无符号长整数)是 %ld\n", ret); printf("字符串部分是 |%s|\n", ptr);}int main(void){
test1(); test2(); return 0;}

运行结果:

在这里插入图片描述
该示例注意点:
1、strtol函数能跳过参数str字符串前面的空格,但不能跳过字母等,若字符串第一个不是数字而是字母,strtol函数无法转换,且在endptr参数指针返回第一个不符合规则的字符。
2、若endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回,如test1函数中,ptr最终指向2030300后面的空格,打印字符串部分的时候也把空格打出来了。
3、类似test2函数这种情况,传入的字符串一开始就是字母,strtol函数返回0。

示例3:

将字符串a, b, c 分别采用10, 2, 16进制转换成数字

#include 
#include
void main(){
char a[] = "100"; char b[] = "100"; char c[] = "ffff"; printf("a = %d\n", strtol(a, NULL, 10)); //100 printf("b = %d\n", strtol(b, NULL, 2)); //4 printf("c = %d\n", strtol(c, NULL, 16)); //65535}

运行结果:

在这里插入图片描述

8.strtod

函数原型:double strtod(char *str, char **endptr);

函数功能:将字符串转换为double型值
返回值:

示例:

#include
#include
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
#include
int main(void){
char forward[]="string"; printf("Before strrev():%s\n",forward); strrev(forward); printf("After strrev():%s\n",forward); return 0;}

在这里插入图片描述

10.待续

转载地址:http://uvxnz.baihongyu.com/

你可能感兴趣的文章