1.字符分类函数

以下函数的头文件为ctype.h

函数           如果它的参数符合下列条件就返回真

iscntrl         任何控制字符。

isspace       空白字符:空格‘ ’,换页 ‘\f’ ,换行 ‘\n’ ,回车 ‘\f’ ,制表符‘\t’或者垂直制表符‘\v’。

isdigit         十进制数字0~9。

isxdigit       十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F。

islower       小写字母a~z。

isupper      大写字母A~Z。

isalpha      字母a~z或A~Z。

isalnum     字母或数字,a~z,A~Z,0~9。

ispunct      标点符号,任何不属于数字或者字母的图形字符(可打印)。

isprint        任何可打印字符,包括图形字符和空白字符。

这些函数使用方法基本类似我们用islower进行举例:

islower是能够判断参数部分的c是否是小写字母的,通过返回值来说明是否是小写字母,如果是小写字母就返回非零的整数,如果不是小写字母,则返回0。

例:将字符串的中小写转变为大写

#include <stdio.h>
#include <ctype.h>
int main()
{
    int i = 0;
    char str[] = "Test string.\n";
    char c;
    while(str[i])
    {
        c = str[i];
        if(islower(c))
            c -= 32;
        putchar(c);
        i++;
    }
    return 0;
}

2.字符转换函数

int tolower(int c)//将参数传出去的大写字母转小写
int toupper(int c)//将参数传出去的小写字母转大写

将刚才的代码进行更改

#include <stdio.h>
#include <ctype.h>
int main()
{
    int i = 0;
    char str[] = "Test string.\n";
    char c;
    while(str[i])
    {
        c = str[i];
        if(islower(c))
            c = toupper(c);
        putchar(c);
        i++;
    }
    return 0;
}

3.strlen函数

strlen函数的作用是计算字符串的长度。

size_t strlen(const char* str)

字符串以‘\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数(不包含'\0')。

参数指向的字符串必须要以‘\0’结束。

注意函数的返回值为size_t,是无符号的。

strlen的使用需要包含头文件。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello";
    printf("长度: %zu\n", strlen(str)); // 输出: 5
    return 0;
}

4.strcpy函数

strcpy函数的作用是将源字符串拷贝到目标字符串。

char* strcpy(char* destination,const char* sourse)

源字符必须以‘\0’结束。

会将源字符中的‘\0’拷贝到目标空间。

目标空间必须足够大,以确保能存放源字符串。

目标空间必须可修改。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20];
    strcpy(dest, "Hello");
    printf("复制后: %s\n", dest); // 输出: Hello
    return 0;
}

5.strcat函数

strcat函数的作用是将源字符串追加在目标字符串末尾。

char* strcat(char* destination,const char* sourse)

源字符串必须以‘\0’结束。

目标字符串中也得有‘\0’,否则没有办法知道追加从哪里开始。

目标空间必须有足够大,能容纳下源字符串的内容。

目标空间必须可修改。

注意:字符串不能给自己追加,否则会出现死循环以及程序崩溃。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello";
    strcat(dest, " World");
    printf("连接后: %s\n", dest); // 输出: Hello World
    return 0;
}

6.strcmp函数

strcmp函数的作用是比较两个字符串。

int strcmp(const char* str1,const char* str2)

第一个字符串大于第二个字符串,则返回大于0的数字。

第一个字符串等于第二个字符串,则返回0。

第一个字符串小于第二个字符串,则返回小于0的数字。

判断两个字符串大小的方法:比较两个字符串中对应位置上字符ASCII码值的大小。

例:
 

#include <stdio.h>
#include <string.h>

int main() {
    int result = strcmp("apple", "banana");
    printf("比较结果: %d\n", result); // 输出: 负数
    return 0;
}

7.strncpy函数

strncpy函数的作用是从源字符串复制指定数量的字符到目标字符串。

char* strncpy(char* destination, const char* sourse, size_t num)

如果源字符串长度大于num只复制前num个字符,不会添加\0。

如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后面追加0,直到num个。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[10];
    strncpy(dest, "Hello World", 5);
    dest[5] = '\0'; // 手动添加结束符
    printf("复制后: %s\n", dest); // 输出: Hello
    return 0;
}

8.strncat函数

strncat函数的作用是从源字符串追加指定数量的字符到目标字符串。

char* strncat(char* destination, const char* sourse, size_t num)

如果sourse指向的字符串的长度小于num的时候,只会将字符串中到\0的内容追加到destination指向的字符串末尾。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello";
    strncat(dest, " World!", 6);
    printf("连接后: %s\n", dest); // 输出: Hello World
    return 0;
}

9.strncmp函数

strncmp函数的作用是比较两个字符串的前n个字符。

int strncmp(const char* str1, const char* str2, size_t num)

比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字母,如果提前发现不一样,就提前结束。如果num个字符都相等,就是返回0。

例:

#include <stdio.h>
#include <string.h>

int main() {
    int result = strncmp("apple", "application", 3);
    printf("比较结果: %d\n", result); // 输出: 0 (前3个字符相同)
    return 0;
}

10.strstr函数

strstr函数的作用是在字符串中查找子串的第一次出现的位置

char* strstr(const char* str1, const char* str2)

函数返回字符串在str2在字符串str1中第一次出现的位置。

字符串的匹配比较不包含\0字符,以\0作为结束标志。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char *found = strstr("Hello World", "World");
    printf("找到: %s\n", found); // 输出: World
    return 0;
}

11.strtok函数

strtok函数的作用是根据分隔符将字符串分割成多个标记。

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

sep参数指向第一个字符串,定义了用作分隔符的字符集合。

第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。

strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符一般都是临时拷贝的内容并且可以修改。)

strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。

strtok函数的第一个参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。

如果字符串中不存在更多的标记,则返回NULL指针。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "a,b,c";
    char *token = strtok(str, ",");
    printf("第一个标记: %s\n", token); // 输出: a
    return 0;
}

12.strerror函数

strerror函数的作用是将错误编号转换为对应的错误描述字符串。

char* strerror(int errnum)

strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。

在不同的系统和C语言标准库的实现中都规定了一些错误码,一般是放在errno.h这个头文件中说明的,C语言程序启动的时候就会使用一个全面的变量errno来记录程序的当前的错误码,只不过程序启动的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会讲对应的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思,所以每一个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

例:

#include <stdio.h>
int main()
{
    FILE * pFile;
    pFile = fopen ("unexit.ent","r");
    //fopen以读的形式打开文件的时候,如果文件不存在就打开失败
    if(pFile == NULL)
        printf("Error opening file unexist.ent: %s\n",strerror(errno));
    return 0;
}
//输出:Error opening file unexist.ent: No such file or directory

C语言内存函数

13.memcpy函数

memcpy函数的作用是从源内存地址复制指定字节数到目标内存呢地址。

void* memcpy(void* destination, const void* sourse, size_t num)

函数memcpy从sourse的位置开始向后复制num个字节的数据到destination指向的内存位置。

这个函数在遇到'\0'的时候并不会停下来。

如果sourse和destination有任何的重叠,复制的结果都是未定义的。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello";
    char dest[10];
    
    memcpy(dest, src, 6); // 复制6个字节(包括\0)
    printf("复制: %s\n", dest); // 输出: Hello
    
    return 0;
}

14.memmove函数

memmove函数的作用是从源内存地址移动指定字节数到目标内存地址。

void* memmove(void* destination, const void* sourse, size_t num)

和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。

如果源空间和目标空间出现重叠,就得使用memmove函数处理。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "ABCDE";
    
    // 将前3个字符移动到后3个位置
    memmove(str + 2, str, 3);
    printf("移动: %s\n", str); // 输出: ABABC
    
    return 0;
}

15.memset函数

memset函数的作用是将内存区域的前n个字节设置为特定值。

void* memset(void* ptr, int value, size_t num)

memset使用来设置内存的,将内存中的值以字节为单位设置成想要的内容。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char buffer[20] = "Hello world";

    memset(buffer, 'X', 9); // 设置9个字节为'X'
    printf("设置: %s\n", buffer); // 输出: 设置: XXXXXXXXXld

    return 0;
}

16.memcmp函数

memcmp函数的作用是比较两个内存区域的前n个字符。

int memcmp(const void* ptr1, const void* ptr2, size_t num)

ptr1大于ptr2就返回大于零的值。

ptr1等于ptr2就返回0。

ptr1小于ptr2就返回小于零的值。

例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "apple";
    
    int result = memcmp(str1, str2, 5);
    printf("比较: %d\n", result); // 输出: 0 (相等)
    
    return 0;
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐