需要注意的一些知识点

字符串:一串零个或多个字符,并且以一个位模式为全0的NUL字节结尾。
字符串长度:所包含的字符个数(不包括NUL字节)。

无符号数在使用时需要特别注意:
如:
   if( strlen( x ) >= strlen( y ) )...
   if( strlen( x ) - strlen( y ) >= 0 )...
其中第一条语句可以按照预想的那样工作,但是第二条语句结果永远是真。
(说明:strlen返回size_t类型)

基础函数

char *strlen( char const *string );
char *strcpy( char *dst, char const *src );
char *strcat( char *dst, char const *src );
int strcmp( char const *s1, char const *s2 );
注意:strcpy,strcat不保证返回的是一个合法的字符串,程序员必须自己保证dst能够容纳字符串。

长度受限字符串函数
char *strncpy(char *dst, char const *src, size_t len );
(src < dst ,将会以NUL填充到len长度,若src>dst,结果不会以NUL字节结尾)
char *strncat( char *dst, char const *src, size_t len);
(最多向dst中复制len个字符,并以NUL字节结尾,但不管复制后长度是否溢出,需程序员字节保证)
int strncmp( char const *s1, char const *s2, size_t len );

内存操作
void *memcpy( void *dst, void const *src, size_t length );
void *memmove( void *dst, void const *src, size_t length );(允许字符串重叠,其余函数对重叠均无定义)
void *memcmp( void const *a, void const *b, size_t length );
void *memchr( void const *a, int ch, size_t length );
void *memset( void *a, int ch, size_t length );

字符操作:使用字符操作函数能提高程序的可移植性。
字符分类函数
iscntrl 任何控制字符
isspace 空白字符:空格' ', 换页'\f', 换行'\n', 回车'\r', 制表符'\t', 垂直制表符'\v'
isdigit 十进制数字0~9
isxdigit 十六进制数字,0~9 a~f A~F
islower 小写字母a~z
isupper 大写字母A~Z
isalpha a~z A~Z
isalnum 字母或数字 a~z A~Z 0~9
ispunct 标点符号,任何不属于数字或字母的图形字符(可打印符号)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符和空白字符

字符转换
int tolower( int ch );
int toupper( int ch );
注意:如果函数的参数并不是处于适当大小写状态的字符(即toupper的参数不是小写字母或tolower的参数不是大写字母),函数将不修改参数直接返回。

高级函数

1.查找一个字符
/*
**返回指向第一个在str中出现的ch的位置的指针。
*/
char  *strchr( char const *str, int ch );
例:  
1 char string[20= "Hello there, honey.";
2 char *ans;
3 ans = strchr( string'h' );
结果:ans = string+7;

/*
**返回指向最后一个在str中出现的ch的位置的指针。
*/
char  *strrchr( char const *str, int ch );

2.查找任何几个字符
/*
**返回指向str中第一个匹配group中任何字符的字符位置。
*/
char  *strpbrk( char const *str, char const *group );
例:
1 char string[20= "Hello there, honey.";
2 char *ans;
3 ans = strpbrk( string"aeiou" );
结果:ans=string+1;

3.查找一个子串
/*
**返回s2在s1中第一次出现的起始位置的指针。
**如果s2在s1中没有出现,返回NULL。
**如果s2为空字符串,返回s1。
*/
char  *strstr( char const *s1, char const *s2 );

注意:不存在strstr或strrpbrk函数。
但是可以很容易实现,如:
查找子串最右一次出现的位置

4.查找一个字符串前缀
/*
**返回str起始部分匹配group中任意字符的字符数。
*/
size_t  strspn( char const *str, char const *group );
例:
1 int len1,len2;
2 char buffer[] = "25,142,330,Smith,j,239-4132";
3 
4 len1 = strspn( buffer, "0123456789");
5 len2 = strspn( buffer, ",0123456789");
结果:len1 = 2;
        len2 = 11;
例2:
//计算一个指向字符串中第一个非空白字符的指针。
ptr = buffer + strspn( buffer, "\n\r\f\t\v" );

/*
**返回str起始部分不与group中任意字符匹配的字符数。
*/
size_t  strcspn( char const *str, char cosnt *group );

5.查找标记
/*
**实现从字符串str中隔离(提取)各个单独的称为token的部分,并丢弃分隔符(在sep中出现的字符)。
*/
char *strtok( char *str, char const *sep );
例:
print_tokens.c
Posted on 2013-06-25 19:49 烽火依然 阅读(219) 评论(0)  编辑 收藏 引用 所属分类: c和指针

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理