1. strlen
size_t strlen (const char* str);
strlen 可以用来求字符串的长度,求字符串的长度不包含末尾的'\0'。
· 字符串以'\0'作为结束标志,strlen 函数返回的是在字符串中'\0'前面出现的字符个数(不包含'\0')。
· 参数指向的字符串必须以'\0'结束。
· 注意函数的返回值为size_t,是无符号的(易错)
strlen 函数的模拟实现
三种方式:
方式1:
//计数器方式
int my_strlen (const char* str)
{
int count=0;
while(*str)
{
count++;
str++;
}
return count;
}
方式2:
//不能创建临时变量计数器
int my_strlen(const char* str)
{
if(*str=='\0')
return 0;
else
return 1+my_srelen(str+1);
}
方式3:
//指针-指针的方式
int my_strlen(char* s)
{
char* p=s;
while(*p!='\0')
p++;
return p-s;
}
2. strcpy
char* strcpy(char* destination,const char* source);
strcpy 会将source地址的字符串拷贝到destination地址处。即将源地址的字符串拷贝到目标地址。
strcpy 返回的是目标空间的起始地址。
· 源字符串必须以'\0'结束。
· 会将源字符串中的'\0'拷贝到目标空间。
· 目标空间必须足够大,以确保能存放源字符串。
· 目标空间必须可变。
strcpy 的模拟实现
char* my_strcpy(char* dest,const char* src)
{
char* ret=dest;
assert(dest!=NULL);
assert(src!=NULL);
while(*dest++=*src++)
{
;
}
return ret;
}
3. strcat
char* strcat (char* destination,const char* source);
strcat 函数的功能是实现字符串追加。会从目标字符串的末尾'\0'处开始追加。
并且会将源字符串的'\0'追加过去。该函数返回的是目标空间的起始地址。
· 源字符串必须以'\0'结束。
· 目标空间必须足够大,能够容纳下源字符串的内容。
· 目标字符串必须可以修改。
· 字符串自己给自己追加,会发生死循环,即一直不停的追加。
原因是:source 永远找不到'\0',就停不下来。
4. strcmp
int strcmp (const char* str1, const char* str2) ;
字符串比较。该函数会从两个字符串的首字符开始比较。若它们的首字符相同,会继续比较下一个字符,直到比较到不同的字符,或者直到有一个字符串指向了末尾的'\0'。
· 标准规定:
· 第一个字符串大于第二个字符串,则返回大于0的数字。
· 第一个字符串等于第二个字符串,则返回0。
· 第一个字符串小于第二个字符串,则返回小于0的数字。
5. 字符分类函数
函数 | 如果他的参数符合下列条件就返回真 |
iscntrl | 任何控制字符 |
isspace | 空白字符:空格' ',换页'\f',换行'\n',回车'\r',制表符'\t'或者垂直制表符'\v' |
isdigit | 十进制数字0~9 |
isxdigit | 十六进制数字,包括所有十进制数字,小写字母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 c ); 转小写
int toupper ( int c ); 转大写