C语言中对字符串的处理主要用到以下几个头文件
ctype:定义对字符处理的库函数
stdlib:定义对字符串进行转换的库函数
stdio:定义对字符和字符串的输入输出操作
string:定义对字符串的处理操作
其中ctype提供的function主要有以下几个:
int isdigit(int c); int isalpha(int c); int isalnum(int c); int isxdigit(int c);
int islower(int c); int isupper(int c); int tolower(int c); int toupper(int c);
int isspace(int c); int isctrl(int c); int isprint(int c); int isgraph(int c); int ispunct(int c);
注意这些函数均将字符作为整数进行处理
stdlib提供对字符串的转换函数,主要有以下几个:
double atof(const char * nPtr);
int atoi(const char * nPtr);
long stol(const char * nPtr);
double strtod(const char * nPtr,char ** endPtr);
long strtol(const char * nPtr,char ** endPtr,int base);
unsigned long strtoul(const char * nPtr,char **endPtr,int base);
endPtr指向字符串参数中数字后面的第一个字符
stdio提供对字符串的输入输出操作,主要有以下几个功能函数:
int getchar(); char * gets(char * s);
int puts(const char * s); int putchar(int c);
注意puts和putchar的返回类型
string提供对字符串的处理功能,主要有以下几个功能函数:
a)字符串操作函数
要对字符串进行操作,需要将字符串保存于char类型的数组中
char * strcpy(char * s1,const char * s2);
char * strncpy(char * s1,const char* s2,size_t n);
char * strcat(char * s1,const char * s2);
char * strncat(char * s1,const char * s2,size_t n);
这里除了strncpy之外,其余的function都会自动在结果字符串中追加'/0'字符
strncpy函数中,如果n的值小于s2的长度,则需要在返回的字符串结尾追加'/0'字符
b)字符串比较函数
int strcmp(const char * s1,const char * s2);
int strncmp(const char * s1,const char * s2,size_t n);
c)字符串查找函数
char * strchr(const char * s1,int c);
char * strrchr(const char * s1,int c);
char * strstr(const char * s1,const char * s2);
char * strtok(char * s1, const char * s2);
对strtok函数的几点说明,strtok函数在查找的字符串中查找第一个不是分隔符的字符,该字符的位置就是第一个标记的起始位置,strtok函数用'/0'代替分隔符,从而形成第一个标记,strtok函数保存标记的下一个字符的位置并返回指向当前标记的指针,第二次调用strtok函数时,用NULL作为第一个参数,参数NULL表示对strtok的调用应该从上次调用strtok保存的位置开始继续把strtok用分隔符打断为各个标记,如果没有剩余的记号,则strtok函数返回空
d)内存函数
包括对内存对象的操作,查找和比较
主要包括以下function:
操作类:
void * memcpy(void * s1,const void * s2,size_t n);
void * memmove(void * s1,const void * s2,size_t n);
void * memset(void * s1,int c,size_t n);
比较类:
void * memcmp(const void * s1,const void * s2,size_t n);
查找类
void * memchr(const void * s1,int c,size_t n);
几点说明:
1.memcpy和memmove的区别,memmove操作过程相当于将s2的前size_t个字节拷贝到一个临时数组中,再从临时数组中拷贝到s1中,所以memmove可以应用于同一个字符串,而memcpy不可以,因为如果memcpy中的两个参数s1和s2如果有重叠,则结果不确定;
2.以上几个函数均作用于内存对象,void类型的指针不能够复印用(因为不知道所指对象占据几个内存单元),因此每个函数中都要指定操作的字节数,即size_t
注意,字符串处理过程中遇到'/0'意味着字符串结束,在memcpy操作时需要注意不要将'/0'字符拷贝过去