目录
- 1. 字符分类函数
- 2. 字符转换函数
- 3. strlen的使用和模拟实现
- 4. strcpy的使用和模拟实现
- 5. strcat的使用和模拟实现
- 6. strcmp的使用和模拟实现
- 7. strncpy函数的使用
- 8. strncat函数的使用
- 9. strncmp函数的使用
- 10. strstr的使用和模拟实现
- 11. strtok函数的使用
- 12. strerror函数的使用
1. 字符分类函数
字符分类函数是用来判断一个字符的类型的函数。在C语言中,有一组标准的字符分类函数可以使用,包括:
isalnum
: 判断字符是否为字母或数字isalnum()
是一个字符串方法,用于检查字符串是否只包含字母和数字。如果字符串只包含字母和数字,则返回True(非0)
,否则返回False(0)
(以下函数同理)。
isalpha
: 判断字符是否为字母isdigit
: 判断字符是否为数字islower
: 判断字符是否为小写字母isupper
: 判断字符是否为大写字母isspace
: 判断字符是否为空白字符(如空格、制表符等)
以下是使用isalnum()
方法的示例代码(其他字符分类函数代码同理):
#include <stdio.h>
#include <ctype.h>
int main()
{
char ch = 'A';
if (isalpha(ch))
{
printf("%c 是一个字母\n", ch);
}
else
{
printf("%c 不是一个字母\n", ch);
}
return 0;
}
- 输出结果
A 是一个字母
2. 字符转换函数
字符转换函数用来在不同字符类型之间进行转换。常用的字符转换函数有:
tolower
: 将大写字母转换为小写字母toupper
: 将小写字母转换为大写字母- 在C语言中,
tolower
函数用于将大写字母转换为小写字母。它接受一个字符作为参数,并返回转换后的结果。
- 在C语言中,
以下是一个示例代码,演示如何使用tolower
函数(toupper
同理):
#include <stdio.h>
#include <ctype.h>
int main()
{
char ch = 'A';
char lowerCh;
lowerCh = tolower(ch);
printf("转换前的字符为: %c\n", ch);
printf("转换后的字符为: %c\n", lowerCh);
return 0;
}
输出结果为:
转换前的字符为: A
转换后的字符为: a
在上面的例子中,我们将字符A
传递给tolower
函数,它将其转换为小写字母a
并将结果赋值给lowerCh
。然后,我们使用printf
函数分别打印原始字符和转换后的字符。
请注意在使用tolower
和toupper
函数之前,必须包含头文件<ctype.h>
。
这些函数只对字母字符有效,对其他字符不做修改。
3. strlen的使用和模拟实现
strlen
函数用来计算一个字符串的长度,即字符串中字符的个数(不包括结尾的空字符’\0’)。在C语言中,可以使用strlen
函数直接获取字符串的长度,例如:
char str[] = "Hello";
int len = strlen(str);
printf("%d",len);
- 输出结果
strlen
的模拟实现可以通过循环计算字符个数来实现:
size_t strlen(const char* str)
{
size_t len = 0;
while (str[len] != '\0')
{
len++;
}
return len;
}
4. strcpy的使用和模拟实现
strcpy
函数用来将一个字符串复制到另一个字符串中。在C语言中,可以使用strcpy
函数直接进行字符串复制,例如:
char source[] = "Hello";
char destination[10];
strcpy(destination, source);
printf("%s", destination);
- 输出结果
strcpy
的模拟实现可以通过循环逐个字符复制来实现:
char* strcpy(char* destination, const char* source)
{
char* dest = destination;
while ((*dest++ = *source++) != '\0')
{
// 拷贝字符直到遇到结尾的空字符
}
return destination;
}
5. strcat的使用和模拟实现
strcat
函数用来将一个字符串追加到另一个字符串的末尾。在C语言中,可以使用strcat
函数直接进行字符串追加,例如:
char str1[15] = "Hello";
char str2[] = " World";
strcat(str1, str2);
printf("%s",str1);
- 输出结果
strcat
的模拟实现可以通过先找到第一个字符串的结尾位置,然后逐个字符追加来实现:
char* strcat(char* destination, const char* source)
{
char* dest = destination;
while (*dest != '\0')
{
dest++;
}
while ((*dest++ = *source++) != '\0')
{
// 追加字符直到遇到结尾的空字符
}
return destination;
}
6. strcmp的使用和模拟实现
strcmp
函数用来比较两个字符串的大小关系。在C语言中,可以使用strcmp
函数直接进行字符串比较,例如:
char str1[] = "abc";
char str2[] = "def";
int result = strcmp(str1, str2);
if (result)
printf("相等");
else
printf("不相等");
- 输出结果
strcmp的返回值为整数,如果两个字符串相等,则返回0;如果第一个字符串小于第二个字符串,则返回负数;如果第一个字符串大于第二个字符串,则返回正数。
strncmp
函数的比较规则如下:
- 首先比较两个字符串的第一个字符,如果不相等,则返回它们之间的ASCII码差值(str1[i] - str2[i]),这个差值可以是正数、负数或零。
- 如果第一个字符相等,则继续比较下一个字符,重复上述步骤,直到比较完n个字符或者遇到不相等的字符。
- 如果比较完n个字符后,两个字符串完全相等,则返回0。
- 如果比较完n个字符后,两个字符串不相等,则返回第一个不相等字符的ASCII码差值(str1[i] - str2[i])。
注意,如果某个字符串的长度小于n,则只比较到该字符串的末尾字符为止。另外,strncmp函数对于含有’\0’(空字符)的字符串也会进行比较,不会提前终止。
strcmp
的模拟实现可以通过逐个字符比较来实现:
int strcmp(const char* str1, const char* str2)
{
while (*str1 && (*str1 == *str2))
{
str1++;
str2++;
}
return *(unsigned char*)str1 - *(unsigned char*)str2;
}
7. strncpy函数的使用
strncpy
函数用来复制指定长度的部分字符串到目标字符串中。在C语言中,可以使用strncpy
函数直接进行字符串复制,例如:
char source[] = "Hello World";
char destination[10];
strncpy(destination, source, 5);
printf("%s",destination);
这个例子中,将source
中的前5个字符(“Hello
”)复制到destination
中。
- 输出结果
因为没有’\0’,所以后面输出的是随机值。
8. strncat函数的使用
strncat
函数用来将指定长度的部分字符串追加到目标字符串的末尾。在C语言中,可以使用strncat
函数直接进行字符串追加,例如:
char str1[15] = "Hello";
char str2[] = " World";
strncat(str1, str2, 5);
printf("%s",str1);
这个例子中,将str2
中的前5个字符(" World
")追加到str1的末尾。
- 输出结果
9. strncmp函数的使用
strncmp
函数用来比较两个字符串的前n个字符的大小关系。在C语言中,可以使用strncmp
函数直接进行字符串比较,例如:
char str1[] = "abc";
char str2[] = "def";
int result = strncmp(str1, str2, 2);
if (result < 0)
{
printf("str1 is less than str2\n");
}
else if (result > 0)
{
printf("str1 is greater than str2\n");
}
else
{
printf("str1 is equal to str2\n");
}
这个例子中,只比较str1
和str2
的前两个字符(“ab
"和"de
”),结果为负数。
- 输出结果
10. strstr的使用和模拟实现
strstr
函数用来在一个字符串中查找另一个字符串第一次出现的位置。在C语言中,可以使用strstr
函数直接进行字符串查找,例如:
char str[] = "Hello World";
char* result = strstr(str, "World");
printf("%p",result);
这个例子中,查找"World
"在str
中第一次出现的位置。
- 输出结果
strstr
的模拟实现可以通过两个循环嵌套来实现:
char* strstr(const char* str, const char* substr)
{
while (*str)
{
const char* s1 = str;
const char* s2 = substr;
while (*s1 && *s2 && (*s1 == *s2))
{
s1++;
s2++;
}
if (!*s2)
{
return str;
}
str++;
}
return NULL;
}
11. strtok函数的使用
strtok
函数用来将一个字符串分割成多个子字符串。在C语言中,可以使用strtok
函数直接进行字符串分割,例如:
char str[] = "Hello,World,!";
char* token = strtok(str, ",");
while (token != NULL)
{
printf("%s\n", token);
token = strtok(NULL, ",");
}
这个例子中,将str
按逗号进行分割,输出三个子字符串(“Hello
”,“World
”,“!
”)。
- 输出结果
12. strerror函数的使用
strerror
函数用来将错误码转换成对应的错误信息字符串。在C语言中,可以使用strerror
函数直接进行错误信息转换,例如:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main()
{
FILE* file = fopen("nonexistent.txt", "r");
if (file == NULL)
{
printf("Error: %s\n", strerror(errno));
}
return 0;
}
这个例子中,尝试打开一个不存在的文件,然后使用strerror
函数将错误码转换成对应的错误信息字符串。
- 输出结果
在使用字符串函数时需要加上头文件 <string.h>