C/C++笔试必须熟悉掌握的头文件系列(四)——string.h/cstring
2016-11-09 17:38
846 查看
1. 说明
“string.h”和ctring都是用来定义处理字符数组char*函数的头文件,后者只不过是C++语言为了统一标准命名空间管理而建立另一个管理函数的头文件,内容都差不多,稍有改进。C/C++中关于字符串头文件有很多,这里先稍微介绍一下“string.h”,“cstring”,“string”头文件以及MFC库中CString类的区别。
CString说了是MFC中专属类,不作图形界面暂且不用掌握,实际使用和“string”头文件string类很相似。
“string.h”头文件中则包含的是C语言标准库定义的,用来处理字符数组char*的函数方法。
“cstring”头文件实际上只是在一个命名空间std中包含了“string.h”,这是因为C++要减少名称污染,当遇到用户自己定义了名称相同的函数,能够与标准库std中函数区分开。
而“string”是包含了C++专门定义一个处理字符串的类string的头文件。类来替代字符数组处理字符串当然有很多优势,这里不再细说。
2. 笔试必掌握函数
①. strlen计算字符数组长度,到字符串结束符’\0’即停止。
char nzArr[100] = "abcdef"; int nLen = strlen(nzArr); //结果为6,并不是100,和分配数组内存大小无关
②. strcpy/strncpy
字符数组拷贝函数,如下:
char nzArr[100]="abcdef",nzBuf1[100],nzBuf2[100]; strcpy(nzBuf1,nzArr); //字符数组后者拷贝给前者 strncpy(nzBuf2,nzArr,3); //字符数组后者拷贝3个字符给前者 int nLen = strlen(nzBuf2); //没有意义
strncpy是拷贝n个字符到前字符数组中,但是由于没有初始化nzBuf2,nzArr前3个字符也没有结束符,所以计算字符数组的长度没有实际意义。
③. strcat
拼接函数,用来将后一个字符数组内容加载在前一个字符数组的后面,并且会自动去除前一个字符数组最后的字符结束符’\0’。
char nzArr[100]="abcd",nzBuf[100]="DDDD"; strcat(nzArr,nzBuf); //nzArr结果为“abcdDDDD”,注意不要超过字符数组空间大小
④. strset
设定字符数组全为某一字符,如果存在‘\0’结束符,遇结束符停止赋值。
char nzArr[100]="abcd"; strcat(nzArr,'g'); //nzArr结果为“gggg”,如果未初始化,则100个空间都为'g'
⑤. memset
与strset类似,赋值字符数组指定字符,但可以指定个数。
char nzArr[100]="abcd"; memset(nzArr,'g',sizeof(nzArr)); //nzArr中全为0,该函数是空间操作,不遇'\0'停止
⑥. strcmp/strcmpi/strncmp
都是字符串比较函数,比较前一字符数组比后一字符数组按Ascii码顺序的大小。如果前者大,则得到结果大于0,相等则为0,前者小则小于0.
strcmpi是不区分大小写比较,而strncmp可以指定比较前多少个字符串的大小。
char nzArr[10]="abc",nzBuf[10]="abC"; int nRel = strcmp(nzArr,nzBuf); //结果为1 int nRel1 = strcmpi(nzArr,nzBuf);//结果为0 int nRel2 = strncmp(nzArr,nzBuf,2);//结果为0
⑦. strstr/strchr
都是查找第二个参数第一次出现在第一个字符数组的位置,前者是查找字符数组,而后者是字符。但是注意返回,返回的是参数出现的地址,需要赋给char*指针来存储,而不是一个索引。
char nzArr[10] ="ababcde",nzBuf[10]="abc"; char* nzCount = (char*)malloc(sizeof(char)*10); char* nzCount1 = (char*)malloc(sizeof(char)*10);//结果分配空间 memset(nCount,0,sizeof(nCount)); //赋初值 memset(nCount1,0,sizeof(nCount1)); //防止未匹配到指定字符或字符数组,而成为野指针 nzCount = strstr(nzArr,nzBuf); //返回为'abcde' nzCount1 = strstr(nzArr,'c'); //返回为'cc'
个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!
转载请注明出处:CSDN 无鞋童鞋
相关文章推荐
- C/C++笔试必须熟悉掌握的头文件系列(九)——string
- C/C++笔试必须熟悉掌握的头文件系列(二)——math.h/cmath
- C/C++笔试必须熟悉掌握的头文件系列(八)——algorithm
- C/C++笔试必须熟悉掌握的头文件系列(三)——stdlib.h/cstdlib
- C/C++笔试必须熟悉掌握的头文件系列(六)——sstream
- C/C++笔试必须熟悉掌握的头文件系列(七)——cctype/ctype.h
- C/C++笔试必须熟悉掌握的头文件系列(二)——math.h/cmath
- C/C++笔试必须熟悉掌握的头文件系列(十)——iomanip.h/iomanip
- C/C++笔试必须熟悉掌握的头文件系列(五)——iostream
- [置顶] C/C++笔试必须熟悉掌握的头文件系列(一)——stdio.h/cstdio
- C++中关于头文件<string>、<string.h>和<cstring>的区别
- 实战c++中的string系列--std::string与MFC中CString的转换
- 实战c++中的string系列--std::string与MFC中CString的转换
- 实战c++中的string系列--std::string与MFC中CString的转换
- c++中的一些类型转换 : CString,string,int ,long,double,char*,const char*,date等
- MFC/C++/C中字符类型CString, int, string, char*之间的转换
- C/C++笔试系列--如何利用成员变量作为成员函数的默认参数
- C++实现CString和string的互相转换
- c++中的一些类型转换 : CString,string,int ,long,double,char*,const char*,date等
- C/C++笔试系列--经典C++笔试题解析3