C语言中的一些内置函数

一、字符函数和字符串函数     

1. 字符分类函数
        C语⾔中有⼀系列的函数是专门做字符分类的,也就是⼀个字符是属于什么类型的字符的。
这些函数的使⽤都需要包含⼀个头⽂件是 ctype.h
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>
int main()
{
    char c1 = 'a';
    char c2 = 'A';
    int ret1 = 0;
    int ret2 = 0;
    ret1 = isupper(c1);
    ret2 = isupper(c2);
    printf("a:%d\n", ret1);
    printf("A:%d\n", ret2);
    return 0;
}
代码运行结果:
        使用isupper()函数(判断是否为大写字母)来举例,可以看出当为大写字母时函数返回一个大于0的数,当为小写字母时返回数字0。其他函数用法一致。
2. 字符转换函数
        字符转换函数有两个toupper() //将参数传进去的⼩写字⺟转⼤写 和tolower() //将参数传进去的⼤写字⺟转⼩写 。这两个函数的使⽤也都需要包含头⽂件 ctype.h
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>
int main()
{
    char ch = 'a';
    int ret = 0;
    ch = toupper(ch);
    printf("%c\n", ch);
    return 0;
}
上述这个代码就是大小写的‘a’,转化成大写的‘A’。tolower()用法类似。
3.strlen函数( 求字符串长度)
        注意点: 
        1.字符串要以'/0'为结尾。
        2.计算的是以传入地址为起点,'/0'前面的字符数。
        3. 函数的返回值为size_t,是无符号的。
        4.该函数要包含头文件 string.h
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    int ret = 0;
    char arr[] = "abcdef";
    ret = strlen(arr);
    printf("%d\n", ret);
    return 0;
}
代码运行结果:
        上面代码strlen(arr)这个就是向strlen函数传入arr的地址,arr为表示的是数组首元素的地址及是'a'的地址,由于字符串"abcdef"后面还有个'\0',所以计算的是从a到f的字符的数量总共有6个。
4.strcpy函数( 字符串拷贝)
        注意点:
        1.源字符串必须以 '\0' 结束。
        2.会将源字符串中的 '\0' 拷⻉到⽬标空间。
        3.⽬标空间必须⾜够⼤,以确保能存放源字符串。
        4.⽬标空间必须可修改。
        5.该函数要包含头文件 string.h
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[] = "abcdef";
    char arr2[20] = "0";
     strcpy(arr2, arr1);
    printf("arr2:%s\n",arr2);
    return 0;
}
代码运行结果:
        上述代码是将arr1的内容复制到arr2中,所以arr2复制了arr1中"abcdef"。
5.strcat函数( 在字符串后面追加字符串)
        注意点:
        1.源字符串必须以 '\0' 结束。
        2.⽬标字符串中也得有 \0 ,否则没办法知道追加从哪⾥开始。
        3.⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。
        4.⽬标空间必须可修改。
        5.该函数要包含头文件 string.h
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[20] = "hello ";
    char arr2[] = "world";
    
strcat(arr1, arr2) ;
    printf("%s\n", arr1);
    return 0;
}
代码运行结果:
        上述代码中 strcat(arr1, arr2)函数是在arr1后面追加arr2字符串。
6.strcmp函数 ( 字符串比较 )
        注意点:
        1. 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
        2.第⼀个字符串等于第⼆个字符串,则返回0
        3.第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[] = "abcdef";
    char arr2[] = "abq";
    char arr3[] = "abq";
    int ret1 = 0;
    int ret2 = 0;
    int ret3 = 0;
    ret1 =
strcmp(arr1, arr2) ;
    ret2 =
strcmp(arr2, arr1) ;
    ret3 =
strcmp(arr2, arr3) ;
    printf("arr1,arr2:%d\narr2,arr1:%d\narr2,arr3:%d\n", ret1, ret2, ret3);
    return 0;
}
代码运行结果:
        上述代码 strcmp(arr1, arr2)arr1与arr2进行比较,由于'q'大于'c',所以字符串"abcdef"小于字符串"abq",返回小于0的数。而 strcmp(arr2, arr1)则返回大于0的数,在strcmp(arr2, arr3),由于arr1,arr2中的字符串一样返回0。
7.strncat、strncpy和strncmp
        这三个函数的用法和上4、5、6函数类似,在函数后面多了一个参数用来指定追加几个字符串,复制几个字符串或比较几个字符串。
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[] = "abcdef";
    char arr2[20] = "0";
    
strncpy(arr2, arr1, 3) ;
    printf("arr2:%s\n",arr2);
    return 0;
}
代码运行结果:
        在上述代码中strncpy(arr2, arr1, 3),说明了在从arr1中复制了前3个字符串给arr2。另外两个函数用法类似。
8.strstr函数 ( 在一个字符串中找另一个字符串 )
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    printf("%s\n",
strstr("ababdefabd", "abd")) ;
    return 0;
}
代码运行结果:
        上述代码中 strstr("ababdefabd", "abd")是在"ababdefabd"中找"abd",找到后返回"abd"在"ab abd efabd"第一次出现的位置。"abd"在"ababdefabd"第一次出现的地方是红色字体部分所以返回" abd efabd"中 a 的地址,strstr(arr1,arr2)就是在arr1里找arr2字符串,如果找到返回arr2在arr1第一次出现的位置。

二、内存函数     

1. memcpy函数 ( 内存拷贝 )
        可以拷贝整形数据,字符数据结构体数据等等。
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    int arr1[] = { 1,2,3,4,5,6,7,8,9,0 };
    int arr2[20] = { 0 };
    
memcpy(arr2, arr1, 3 * sizeof(int));
    printf("arr2:");
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr2[i]);
    }
    return 0;
}
代码运行结果:
        上述代码中的 memcpy(arr2, arr1, 3 * sizeof(int))和strcpy类似,只是strcpy只能拷贝字符数据,而memcpy能拷贝任意类型数据,只是要自己指定拷贝多少字节数据。memcpy(arr2, arr1, 3 * sizeof(int))的意思就是把arr1中的前( 3 * sizeof(int))==12字节的数据拷贝到arr2中。
2.memmove函数
         memmove函数和memcpy函数类似,区别就是,用memmove函数 处理的源内存块和⽬标内存块是可以重叠的。
3.memset函数 ( ⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容 )
eg:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
    char arr[] = "hello world!";
     memset(arr, '#', 5);
    printf("%s\n", arr);
    return 0;
}
代码运行结果:
        上述代码中 memset(arr, '#', 5),将数组arr中的前5个字节的数据改成'#'。
4.memcmp函数
        memcmp函数和strcmp函数类似,区别就是memcmp函数 只能比较字符数据,而memcmp函数能比较任意类型数据,只是要自己指定拷贝多少字节数据。
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Milliliter___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值