str-的函数以前总是困扰着我,在这里稍作下总结。
1,库函数strlen:计算字符串的长度。
原型:size_t strlen( char const *string );
/* 计算字符串的长度 */
#include <stddef.h>
size_t strlen( char const *string )
{
int length;
for( length = 0; *string++ != '\0'; )
length += 1;
return length;
}
注意:strlen返回的是一个类型为size_t的值,这个类型是在头文件stddef.h中定义的,它是一个无符号整数类型。在表达式中使用无符号数可能导致不可预料的结果,例如
if( strlen ( x ) >= strlen ( y ) )...
if( strlen( x ) - strlen ( y ) >= 0 )...
第一条语句按照你预想的那样工作,但第二条语句的结果将永远是真。
2,不受限制的字符串函数。
最常见的字符串函数都是“不受限制”的,就是说他们只是通过寻找字符串参数结尾的NUL字节来判断它的长度。
(1)strcpy函数:复制字符串。原型如下:
char *strcpy( char *dst, char const *src );
(2)strcat函数:连接字符串。原型如下:
char *strcat( char *dst, char const *src );
strcpy( message, "Hello " );
strcat( message, customer_name );
strcat( message, ", how are you?" );
输出结果就是字符串:Hello Jim, how are you?( customer_name[] = "Jim"; )
(3)strcmp函数:字符串比较。原型如下:
int strcmp( char const *s1, char const *s2 );
如果s1小于s2,strcmp函数返回一个小于零的值;如果s1大于s2,函数返回一个大于零的值;如果两个字符串相等,函数就返回零。
注意:我们常常容易编写这样的代码:if( strcmp( a,b ) )。
其实,把这个返回值作为布尔值进行一个测试是一种坏风格,因为它有三种截然不同的结果,所以,更好的方法是把这个返回值与零进行比较,例如:if( strcmp( a,b ) ==0 )。
3,长度受限的字符串函数。
char *strncpy( char *dst, char const *src, size_t len );
char *strncat( char *dst, char const *src, size_t len );
char *strncmp( char const *s1, char const *s2, size_t len );
4,查找。
(1)查找一个字符。
char *strchr( char const *str, int ch );
char *strrchr( char const *str, int ch );
strchr在字符串str中查找字符ch第一次出现的位置,找到后函数返回一个指向该位置的指针。如果该字符串并不存在与字符串中,函数就返回一个NULL指针。
strrchr的功能与strchr基本一致,只是它返回的是一个指向字符串中该字符最后一次出现的位置(最右边的那个)。
char string[20] = "Hello there, honey.";
char *ans;
ans = strchr( string, 'h' );
ans所指向的位置将是string+7。
(2)查找一个字符串前缀。
char *strspn( char const *str, char const *group );
char *strcspn( char const *str, char const *group );
group字符串指定一个或多个字符。strspn返回str起始部分匹配group中任意字符的字符数。
int len1,len2;
char buffer[] = "25,142,330,Smith,J,239-4123";
len1 = strspn( buffer, "0123456789" );
len2 = strspn( buffer, ",0123456789" );
结果为:len2为2,len2为11。
strcspn函数和strspn函数正好相反,它对str字符串起始部分中不与group中任何字符匹配的字符进行计数。
(3)查找标记。
char *strtok( char *str, char const *sep );
sep参数是个字符串,定义了用作分隔符的字符集合。第一个参数指定一个字符串,它包含零个或多个有sep字符串中一个或多个字符分隔符分隔的标记。strtok找到str的下一个标记,并将其用NULL结尾,然后返回一个指向这个标记的指针。
/* 从一个字符数组中提取空白字符分隔的标记并把它们打印出来 */
#include <stdio.h>
#include <string.h>
void print_tokens( char *line )
{
static char whitespace[] = " \t\f\r\v\n ";
char *token;
for( token = strtok( line, whitespace )
token != NULL;
token = strtok( NULL, whitespace ) )
printf( "Next token is %s\n", token );
}
5,错误信息。
char *strerror( int error_number );
strerror函数把其中一个错误代码作为参数并返回一个指向用于描述错误的字符串的指针。