编程其实很多时候都在和字符串打交道,因为毕竟给人能够呈现出来的信息还是需要用到文字,用到字符串。
可能最大的字符串处理程序就是微软的office了。
第一个涉及到的头文件是 ctype.h,顾名思义,主要是用来确认字符类型的。
函数原型如下:
int isxxx( char c );
常用的应该是isalpha, 和 isalnum, 分别是字母,字母和数字。
在C标准库里边找到了一张图,感觉它总结的很不错。
第二个需要介绍的是字符串到数字的转换,就是把“100”转换成int a=100;
这种转换对应的c标准库头文件是stdlib.h
转double型 double atof( char *ptr );
转int型 int atoi( char *ptr );
转long型 long atol( char *ptr );
还有一个把double转换成char的,有点复杂, 输入参数包含num和ndigit分别代表需要转换的数,以及我想要的位数(可能是因为double类型小数点后边太多吧),输出参数就是后边两个,decp代表小数点位置(输出的字符串是不含有小数点的,自己可以通过这个参数再加上去),sign代表正负符号。
char *ecvt( double num, int ndigit, int *decp, int *sign);
可能更加常用的还是sprintf
int sprintf( char *buffer, const char *format, [ argument] … );
第三个是关于串的处理,c标准库有一个string.h,在这个头文件里边定义了NULL, size_t等
里边定义了关于串的常用处理操作,包含:比较,复制,赋值,查找,连接,分割等功能。
1.比较,比较操作返回0,代表两个字串相等
int memcmp(const void *, const void *, size_t);
int strcmp(const char *, const char *) ;
2.复制
char * strcpy( char *dest, char *src );
char * strncpy( char *dest, char *src, size_t n ) ;
3.赋值
void *memset (void *a, int c, size_t n) ;
4.查找
char * strchr( const char *s, int c ); 返回第一个匹配的字符c的位置指针, strchr( "abc", '\0' ),返回结束符指针。
char * strrchr( const char *s, int c ); 反着找
接下来这个查找是异常查找,没找到才返回,比如一个串“abc1”,匹配串是"abcdefg",代表可以接受的字符集合
size_t *strspn( const char *s, const char *accept ); //返回3,指向”1“
还有一个strcspn,把accept集合变成了,”notaccept“
size_t *strspn( const char *s, const char *notaccept ); //返回0,指向”a“
5.连接
char *strcat( char *dest, const char *src )
6.分割,分割这个函数以前从来没用过,遇到过一个比较复杂的串需求(类似了QQ表情支持的文字自动转图片功能),当时是自己用了一个状态机实现的。
注意:*这个函数是带缓存的*, 它是用delim里边的任意字符来分割dest串,
char * strtok ( char *dest, const char *delim )
第一次调用很好理解,返回分割后的串,第二次dest传入NULL,就等同于继续分割。
举个例子
char str[] = "abc;def,ghi";
char *t;
t = strtok(str, ";,:"); /* t == */
t = strtok(NULL, ";,:"); /* t == "def" */
t = strtok(NULL, ";,:"); /* t == "ghi" */
t = strtok(NULL, ";,:"); /* t ==NULL */