c语言字符函数和字符串函数

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函数用于将大写字母转换为小写字母。它接受一个字符作为参数,并返回转换后的结果。

以下是一个示例代码,演示如何使用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函数分别打印原始字符和转换后的字符。

请注意在使用tolowertoupper函数之前,必须包含头文件<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函数的比较规则如下:

  1. 首先比较两个字符串的第一个字符,如果不相等,则返回它们之间的ASCII码差值(str1[i] - str2[i]),这个差值可以是正数、负数或零。
  2. 如果第一个字符相等,则继续比较下一个字符,重复上述步骤,直到比较完n个字符或者遇到不相等的字符。
  3. 如果比较完n个字符后,两个字符串完全相等,则返回0。
  4. 如果比较完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");
}

这个例子中,只比较str1str2的前两个字符(“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>

  • 42
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值