C语言学习记录——삼십구 字符串函数使用和剖析(3)

目录

一、strtok

二、strerror

三、字符分类函数

四、字符转换函数


一、strtok

char* strtok(char* str, const char* sep)

1、sep参数是一个字符串,定义了用作分隔符的字符集合。

2、第一个参数指定一个字符串,它包含了0个或者多个由 sep 字符串中一个或者多个分隔符分割的标记。
3、strtok 函数找到 str 中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针。( strtok 函数会改变被操作的字符串,所以在使用 strtok 函数切分的字符串一般都是临时拷贝的内容并且可修改。)
4、strtok 函数的第一个参数不为 NULL ,函数将找到 str 中第一个标记, strtok 函数将保存它在字符串中的位置。

5、strtok 函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
6 、如果字符串中不存在更多的标记,则返回 NULL 指针。

比如

char* arr[] = "zpw@bitedu.tech"

1.2sep所指向的就是@和 . ,而剩下的则由str指向。

3.当调用这个函数时,sep会把@变为\0,然后读取时,就会只打印zpw,然后再次调用再从bite开始读取。当strtok函数进行切割时,会先拷贝一份这个字符串,然后对拷贝出来的字符串进行操作。

4、调用函数时,传过来被切割的字符串,传入的是首元素地址,之后找到第一个分割点,变为\0,记住这个位置,并返回z的地址

5、传第一次,传了z的地址,然后进行分割,第二次传的时候,传入空指针,那么就从分割点那里开始往下进行操作

形象的看一下

int main()
{
    char arr[] = "zpw@bitedu.tech";
    const char* p = "@.";
    char buf[1024] = { 0 };
    strcpy(buf, arr);
    //切割buf中的字符串
    char* ret = strtok(arr, p);
    printf("%s\n", ret);
    ret = strtok(NULL, p);
    printf("%s\n", ret);
    ret = strtok(NULL, p);
    printf("%s\n", ret);
}

从注释开始,用一个指针变量ret来接收返回的地址,第一次会打印zpw,此时@变为\0,之后传入NULL,然后打印bitedu,依次进行。但函数的用法不是这样的。

int main()
{
    char arr[] = "zpw@bitedu.tech";
    const char* p = "@.";
    char buf[1024] = { 0 };
    strcpy(buf, arr);
    //切割buf中的字符串
    char* ret = NULL;
    for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p))
    {
        printf("%s\n", ret);
    }
    return 0;
}

二、strerror

返回错误码所对应的错误信息

char* strerror(int errnum)

比如

#include <stdio.h>
#include <errno.h>
//errno是一个全局的错误码的变量。当c语言的库函数在执行过程中,发生了错误,就会把对应的错误码,赋值到errno中
 

int main()
{
    char* str = strerror(errno);
    printf("%s\n", str);
    return 0;
}

这个函数比较简单,这时候会打印处No error。

三、字符分类函数

有很多函数。可用作判断。

#include <stdio.h>
#include <ctype.h>

int main()
{
    char ch = 'w';
    int ret = islower(ch);
    printf("%d\n", ret);
    return 0;
}


是小写字母,就返回正数,大写字母返回负数,非字母返回0。

分类函数有很多,可去查。

四、字符转换函数

tolower,toupper,如词,转小写,转大写。

#include <stdio.h>

int main()
{
    char arr[] = "I Am A Student";
    int i = 0;
    while (arr[i])
    {
        if (isupper(arr[i]))
        {
            arr[i] = tolower(arr[i]);
        }
        i++;
    }
    printf("%s\n", arr);
    return 0;
}

结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值