C语言中对字符串的操作处理

来源:互联网 发布:软件开发外包协议范本 编辑:程序博客网 时间:2024/05/23 01:24

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'字符拷贝过去