分类
Level1

头文件string.h/cstring

string.h(ctring)是用来定义处理字符数组char函数的头文件。   

而string是包含了C++专门定义一个处理字符串的类string的头文件。类来替代字符数组处理字符串当然有很多优势,本章不描述string类。

必掌握函数:

  • 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'