目录
一、字符函数
字符函数的头文件为<ctype.h>
详见C语言官方解释:<cctype> (ctype.h) - C++ Reference (cplusplus.com)
1.1字符分类函数
函数 | 判断类型(若为真则返回正数,假则返回0) |
---|---|
iscntrl | 控制字符 |
isscape | 空格,换页\f,换行\n,回车\r,制表符\t |
isdigit | 十进制数字 0~9 |
isxdigit | 十六进制数字,包含十进制字符,小写字母a~f,大写字母A~F |
islower | 所有小写字母 |
isupper | 所有大写字母 |
isalpha | 所有字母 |
isalnum | 所有字母和数字 |
ispunct | 所有标点符号 |
isgraph | 所有图形字符 |
1.2字符转换函数
函数 | 作用 |
---|---|
tolower | ⼤写字⺟转⼩写 |
toupper | ⼩写字⺟转⼤写 |
二、字符串函数
字符串函数的头文件为<string.h>
详见C语言官方解释:<cstring> (string.h) - C++ Reference (cplusplus.com)
2.1 strlen
size_t strlen ( const char * str );
- 功能:求字符串长度
- 注意事项:
- 字符串必须以‘\0’结尾。
- 返回值为size_t类型,无法做加减法。
2.2 strcpy
char* strcpy(char * dest, const char * source );
- 功能:拷贝一个数组覆盖原先数组
- 注意事项:
- 目标空间必须足够大。
- 拷贝的数组必须要以‘\0’结尾。
2.3 strcat
char * strcat ( char * dest, const char * source);
- 功能:用来连接两个字符串。
- 注意事项:
- 两个字符串必须要以‘\0’结尾。
- 一个数组的空间必须足够大。
2.4 strcmp
int strcmp ( const char * str1, const char * str2 );
- 功能:用来比较两个字符串。
- 返回值:大于-返回正数;小于-返回负数;等于-返回0
2.5 strncpy
char * strncpy ( char * dest, const char * source, size_t num );
- 功能:用来拷贝指定长度的字符(长度不够末尾末尾补‘\0’)。
- 注意事项:拷贝结束后函数会自动在结尾补‘\0’。
2.6 strncat
char * strncat ( char * dest, const char * source, size_t num );
- 功能:用来把一个指定长度的字符连接到另一个字符串后面。
- 注意事项:
- 如果长度不够,函数自动忽略不够的字符数。
- 拷贝结束后函数会自动在结尾补‘\0’。
2.7 strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
- 功能:用来比较指定长度的字符串。
- 返回值:大于-返回正数;小于-返回负数;等于-返回0。
2.8 strstr
char * strstr ( const char * str1, const char * str2);
- 功能:用来查找在str1中是否存在str2。
- 返回值:有-返回str2在str1中第一次出现的首元素地址;无-返回空指针。
2.9 strtok
char * strtok ( char * str, const char * sep);
- 功能:用来切割字符串,将已定义的分隔符改为‘\0’。
- 说明:使用时需自己定义分隔符数组sep,并传参给函数
- 返回值:没有找到分隔符-返回空指针
- 注意事项:
- 该函数会改变原数组,建议拷贝一份原数组再进行操作。
- 若存在多个字符需要修改:第一次修改需要传递字符串数组的地址,下一次修改需要传给空指针(函数本身自动保存上一次修改后的地址)。
- 使用范例:
#include<stdio.h>
#include<string.h>
int main()
{
char string[] = "192.168.4.1";
char* sep = ".";
char* str = NULL;
for (str = strtok(string, sep); str != NULL; str = strtok(NULL, sep))
{
printf("%s\n", str);
}
return 0;
printf("%s", string);
}
三、字符串函数的模拟实现
3.1strlen
//计数器⽅式
int my_strlen(const char * str)
{
int cnt = 0;
while(*str)
{
cnt++;
str++;
}
return cnt;
}
//指针-指针的⽅式
int my_strlen(char *s)
{
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}
3.2strcpy
void my_strcpy(char* dest, char* source)
{
int i = 0;
while (*(source + i) != '\0')
{
*(dest + i) = *(source + i);
i++;
}
}
3.3strcat
char* my_strcat(char* dest, const char* source)
{
char* ret = dest;
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *source++)
{
;
}
return ret;
}
3.4strcmp
int my_strcmp(char* str1, char* str2)
{
while (*str1 == *str2)
{
if (*str1 == 0 && *str2 == 0)
{
return 0;
break;
}
str1++;
str2++;
}
return *str1 - *str2;
}
3.5strstr
char* my_strstr(char* source, char* aim)
{
char* p1 = NULL;
char* p2 = NULL;
char* curp = source;
while (*curp)
{
p1 = curp;
p2 = aim;
while (*p1 == *p2 && *p2 != '\0')
{
p1++;
p2++;
}
if (*p2 == '\0')
{
return curp;
}
curp++;
}
return NULL;
}
3.6strncpy
void my_strncpy(char* dest, char* source, int num)
{
int i = 0;
while (num--)
{
*(dest+i) = *(source+i);
i++;
}
}
3.7strncat
void my_strncat(char* dest, char* source, int num)
{
int i = 0;
while (*source != '\0')
{
source++;
}
while (num--)
{
*(source + i) = *(dest + i);
i++;
}
}