string.h头文件解析

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

最近公司的项目用MFC做的,碰到到很多字符串处理问题,用CString类处理起来总感觉力不从心,于是,总结了C语言中常用的字符处理函数,留作备用。

先贴出string.h头文件的内容,这个来自MSDN。

#if <TRADITIONAL C HEADERS>
   #include <string.h>
namespace std {
   using ::memchr; 
   using ::memcmp;
   using ::memcpy; 
   using ::memmove; 
   using ::memset;
   using ::size_t; 
   using ::strcat; 
   using ::strchr; 
   using ::strcmp;
   using ::strcoll; 
   using ::strcpy; 
   using ::strcspn;
   using ::strerror;
   using ::strlen;
   using ::strncat;
   using ::strncmp;
   using ::strncpy; 
   using ::strpbrk;
   using ::strrchr; 
   using ::strspn; 
   using ::strstr;
   using ::strtok; 
   using ::strxfrm;
}
#endif

介绍上面这些函数之前,先介绍几个上面没有的。

bcmp

原型:extern int bcmp(const void *s1, const void *s2, int n);
  
  用法:#include <string.h>
  
  功能:比较字符串s1和s2的前n个字节是否相等
  
  说明:如果s1=s2或n=0则返回零,否则返回非零值。bcmp不检查NULL。
// bcmp.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s1="Golden Global View";
        char *s2="Golden global view";;
        
        clrscr();        // clear screen
        if(!bcmp(s1,s2,7))
          printf("s1 equal to s2 in first 7 bytes");
        else
          printf("s1 not equal to s2 in first 7 bytes");

        getchar();
        clrscr();
        if(!bcmp(s1,s2,12))
          printf("s1 equal to s2 in first 12 bytes");
        else
          printf("s1 not equal to s2 in first 12 bytes");

        getchar();
        return 0;
      }

bcopy

原型:extern void bcopy(const void *src, void *dest, int n);
  
  用法:#include <string.h>
  
  功能:将字符串src的前n个字节复制到dest中
  
  说明:bcopy不检查字符串中的空字节NULL,函数没有返回值。
 // bcopy.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s="Golden Global View";
        char d[20];
        
        clrscr();        // clear screen
        bcopy(s,d,6);
        printf("s: %s\n",s);
        printf("d: %s\n",d);

        getchar();
        clrscr();
        s[13]=0;
        bcopy(s+7,d,11);  // bcopy ignore null in string
        printf("%s\n",s+7);
        for(i=0;i<11;i++)
          putchar(d[i]);

        getchar();
        return 0;
      }

bzero

 原型:extern void bzero(void *s, int n);

  用法:#include <string.h>
  
  功能:置字节字符串s的前n个字节为零。
  
  说明:bzero无返回值。
 // bzero.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        struct
        {
          int a;
          char s[5];
          float f;
        } tt;
        
        char s[20];
        
        bzero(&tt,sizeof(tt));  // struct initialization to zero
        bzero(s,20);
        
        clrscr();
        printf("Initail Success");

        getchar();
        return 0;
      }

memicmp

 原型:extern int memicmp(void *buf1, void *buf2, unsigned int count);
        
  用法:#include <string.h>
  
  功能:比较内存区域buf1和buf2的前count个字节但不区分字母的大小写。
  
  说明:memicmp同memcmp的唯一区别是memicmp不区分大小写字母。
        当buf1<buf2时,返回值<0
        当buf1=buf2时,返回值=0
        当buf1>buf2时,返回值>0
 // memicmp.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s1="Hello, Programmers!";
        char *s2="Hello, programmers!";
        int r;
        
        clrscr();
        
        r=memicmp(s1,s2,strlen(s1));
        if(!r)
          printf("s1 and s2 are identical");
        else
        if(r<0)
          printf("s1 less than s2");
        else
          printf("s1 greater than s2");
        

        getchar();
        return 0;
      }

memchr

原型:extern void *memchr(void *buf, char ch, unsigned count);

  用法:#include <string.h>
  
  功能:从buf所指内存区域的前count个字节查找字符ch。
  
  说明:当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。
  // memchr.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s="Hello, Programmers!";
        char *p;
        
        clrscr();
        
        p=memchr(s,'P',strlen(s));
        if(p)
          printf("%s",p);
        else
          printf("Not Found!");

        getchar();
        return 0;
      }
      

memcmp

原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
        
  用法:#include <string.h>
  
  功能:比较内存区域buf1和buf2的前count个字节。
  
  说明:
        当buf1<buf2时,返回值<0
        当buf1=buf2时,返回值=0
        当buf1>buf2时,返回值>0
// memcmp.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s1="Hello, Programmers!";
        char *s2="Hello, programmers!";
        int r;
        
        clrscr();
        
        r=memcmp(s1,s2,strlen(s1));
        if(!r)
          printf("s1 and s2 are identical");
        else
        if(r<0)
          printf("s1 less than s2");
        else
          printf("s1 greater than s2");
        

        getchar();
        return 0;
      }

memcpy

 原型:extern void *memcpy(void *dest, void *src, unsigned int count);

  用法:#include <string.h>
  
  功能:由src所指内存区域复制count个字节到dest所指内存区域。
  
  说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。

 // memcpy.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s="Golden Global View";
        char d[20];
        
        clrscr();
        
        memcpy(d,s,strlen(s));
        d[strlen(s)]=0;
        printf("%s",d);

        getchar();
        return 0;
      }

memset
原型:extern void *memset(void *buffer, int c, int count);
        
  用法:#include <string.h>
  
  功能:把buffer所指内存区域的前count个字节设置成字符c。
  
  说明:返回指向buffer的指针。
 // memset.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s="Golden Global View";
        
        clrscr();
        
        memset(s,'G',6);
        printf("%s",s);

        getchar();
        return 0;
      }

strtok

 原型:extern char *strtok(char *s, char *delim);
        
  用法:#include <string.h>
  
  功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。
  
  说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。
        strtok在s中查找包含在delim中的字符并用NULL('\0')来替换,直到找遍整个字符串。
        返回指向下一个标记串。当没有标记串时则返回空字符NULL。

  // strtok.c
      
      #include <syslib.h>
      #include <string.h>
      #include <stdio.h>

      main()
      {
        char *s="Golden Global View";
        char *d=" ";
        char *p;
        
        clrscr();
        
        p=strtok(s,d);
        while(p)
        {
          printf("%s\n",s);
          strtok(NULL,d);
        }

        getchar();
        return 0;
      }

strcspn

原型:extern int strcspn(char *s1,char *s2);
        
  用法:#include <string.h>
  
  功能:在字符串s1中搜寻s2中所出现的字符。
  
  说明:返回第一个出现的字符在s1中的下标值,亦即在s1中出现而s2中没有出现的子串的长度。

 // strcspn.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s="Golden Global View";
        char *r="new";
        int n;
        
        clrscr();
        
        n=strcspn(s,r);
        printf("The first char both in s1 and s2 is: %c",s[n]);
        
        getchar();
        return 0;
      }

strpbrk
原型:extern char *strpbrk(char *s1, char *s2);
        
  用法:#include <string.h>
  
  功能:在字符串s1中寻找字符串s2中任何一个字符相匹配的第一个字符的位置,空字符NULL不包括在内。
  
  说明:返回指向s1中第一个相匹配的字符的指针,如果没有匹配字符则返回空指针NULL。
 // strpbrk.c
      
      #include <syslib.h>
      #include <string.h>

      main()
      {
        char *s1="Welcome To Beijing";
        char *s2="BIT";
        char *p;
        
        clrscr();
                
        p=strpbrk(s1,s2);
        if(p)
          printf("%s\n",p);
        else
          printf("Not Found!\n");
		
        p=strpbrk(s1, "Da");
        if(p)
          printf("%s",p);
        else
          printf("Not Found!");

        getchar();
        return 0;
      }

另外常用的还有

atofconverts a string to a double
atoiconverts a string to an integer
atolconverts a string to a long
isalnumtrue if a character is alphanumeric
isalphatrue if a character is alphabetic
iscntrltrue if a character is a control character
isdigittrue if a character is a digit
isgraphtrue if a character is a graphical character
islowertrue if a character is lowercase
isprinttrue if a character is a printing character
ispuncttrue if a character is punctuation
isspacetrue if a character is a space character
isuppertrue if a character is an uppercase character
isxdigittrue if a character is a hexidecimal character
strstrfinds the first occurance of a substring of characters
strtodconverts a string to a double
strtokfinds the next token in a string
strtolconverts a string to a long
strtoulconverts a string to an unsigned long
strxfrmconverts a substring so that it can be used by string comparison functions
tolowerconverts a character to lowercase
toupperconverts a character to uppercase
c_str 将string类型转换为const char*类型

其他更多内容,可以参考的string.h说明http://www.cplusplus.com/reference/clibrary/cstring/


C语言专题——标准库math.h 1 三角函数double sin (double);double cos (double);double tan (double);2 反三角函数double asin (double);    结果介于[-PI/2, PI/2]double acos (double);    结果介于[0, PI]double atan (double);    反正切(主值), 结果介于[ 阅读详情

相关推荐

C语言头文件完全解析(连“#”我都给你讲明白)

C语言头文件完全解析 引言 本文将尽量详细的介绍c语言的头文件所包含的知识,如有错误,还望指正。 萌新们肯定疑惑为什么每次打代码都要写一个所谓的头文件(如:#include<stdio.h>),这里先简单让大家有个了解,你所用的 printf("%d",a)就是这个 stdio里的东西,如果没有这个头文件,编译器都不知道 printf是个什么东东。所以头文件就是一个准备好的大仓库,你可...

CRAZY_eyes的博客 7万+

C标准库<string.h>实现

本文地址:http://www.cnblogs.com/archimedes/p/c-library-string.html,转载请注明源地址。 1.背景知识 &lt;string.h&gt;中声明的函数是对标准C的一个重要补充,它们支持C语言把文本作为字符数组操作的传统。 string.h是C语言中C标准库的头文件,其中包含了宏定义、常量以及函数和类型的声明,涉及的内容除了字符串处理之外,...

weixin_33875839的博客 180

ANSI-C标准函数库(中文)

ANSI-C标准函数库(中文)

C标准库string.h源码(简单版)

C标准库string.h源码(简单版)strcpy/strncpystrcat/strncatstrcmp/strncmpstrchr/strrchr/strchrnul/strstr strcpy/strncpy char * strcpy (char * dst, const char * src) { char * cp = dst; while( *cp++ = *src++ != '\0') ; /* Copy src over dst

nbu_dahe的博客 2038

C语言的发展史-3

C语言的发展史1    C语言的发展史-2 原文 The Development of the C Language 不满足网上的译文,yqj2065自己翻译一下。备用。【】是译注、补充。 C初生 在本语言取名后,快速地变更不停,例如&&和||操作符的引入。在BCPL和B中,表达式求值依赖于上下文:在if和其它条件语句中比较一个表达式的值与零,这些语言对与(&)和或(|)运算

yqj2065的博客 4924

C语言头文件 <string.h>内容

<string.h> 是一个标准 C 语言库头文件。它定义了若干个与字符串操作有关的函数。具体来说,它包含了以下内容: 一些宏定义,例如 NULL、size_t 和 memset() 等。 字符串复制函数,例如 strcpy() 和 strncpy()。 字符串连接函数,例如 strcat() 和 strncat()。 字符串比较函数,例如 strcmp() 和 strncmp()...

weixin_35757191的博客 1550

C语言<string.h>头文件所包含的部分函数的解析

strlen strcat strcpy strcmp strncat strncpy strncmp strtok strstr memmove memcpy

LiangXiay的博客 1472

头文件stringstring.h的区别

头文件stringstring.h的区别 在C++中,#include与#include的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器)。 喔,原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath

happykongmengmeng的专栏 422

c++中string 头文件string.h 头文件的区别

头文件stringstring.h的区别 在C++中,#include与#include的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器)。 喔,原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath就是

小熊波波的专栏 1658

头文件cstringstringstring.h的区别

头文件cstringstringstring.h的区别 cstring:只支持MFC的工程项目 string:是c++标准的类库,也是STL里的库 string.h:其中.h的头文件是c语言的头文件,这里是c语言对于字符数组的函数定义的头文件 所以,c++中若要用cout输出string类型的字符串,需要用头文件 #include<string> 举例说明 #include<iostream> #include<string> using namespace st

qq_47907531的博客 375

c/c++中stringstring.h头文件的区别

在C++中,#include<iostream>与#include<iostream.h>的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,出了有些搞嵌入式的用变态的编译器)。 喔,原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c...

Hcaroline 494

stringstring.h以及cstring的区别

在C++中,#include<iostream>与#include<iostream.h>的区别,前者要使用更新的编译器(其实大部分编译器多比较前卫了,除了有些搞嵌入式的用变态的编译器),后者在有些VS版本中已经不再支持了 原来iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h扩展名,将以前的C的头文件转化为C++的头文件后,...

积累点滴,保持自我 3527

string.h和string这两个头文件

c语言的string.h头文件跟C++的string类半点关系也没有,所以<string>并非<string.h>的“升级版本”,他们是毫无关系的两个头文件。 <string.h>是旧的C 头文件,对应的是基于char*的字符串处理函数;<string> 是包装了std 的C++头文件,对应的是新的string 类(看下文);<cstring...

woainilixuhao的博客 791

C++ 头文件cstring,string.h,string 三者的区别

头文件cstring, string.h, string的区别

飞信天下专栏 4260

string.h和strings.h的区别

strings.h头文件是从BSD系UNIX系统继承而来,里面定义了一些字符串函数,如bzero等。这些函数曾经是posix标准的一部分,但是在POSIX.1-2001标准里面,这些函数被标记为了遗留函数而不推荐使用。在POSIX.1-2008标准里已经没有这些函数了。如下: int bcmp(const void *, const void *, size_t); /* 用memcmp

xin_yu_xin的专栏 1万+
上一篇: ATL正则表达式库使用
下一篇: Opengl编程低级错误范例手册
lniwn
博客等级 码龄15年 33粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值