C语言字符操作函数合集(功能+案例 万字总结)

前言: 

本文主要以最简单的有代表性的案例来体现函数的功能,对于这些函数更灵活的运用和技巧还要靠大家勤动手挖掘。

文章较长点击目录即可跳转到目标函数,关于函数原型如果有疑惑请看函数语法更好理解。

说明:

以下的函数使用时需要加上头文件

# include "stdio.h"

#include "string.h"

# include "ctype.h"

文中的

  • arry均表示数组
  • char表示字符
  • srting表示字符串(包括字符char)
  • num表示数值
  • strlen_1表示字符串string_1的长度
  • strlen_2表示字符串string_2的长度

目录

🌟字符串操作

🔸strcpy()

常规情况:

✏实例: 

非常规情况:

✏实例:  

🔸strncpy()

常规情况:

✏实例:  

非常规情况: 

✏实例:  

🔸strcat()

常规情况:

✏实例:  

🔸strncat()

常规情况:

✏实例:  

🔸strlen()

常规情况:

 ✏实例: 

🔸strcmp

常规情况:

  ✏实例: 

🔸strcasecmp()

 常规情况:

 ✏实例:  

🔸strncmp()

常规情况:

 ✏实例:  

🔸strchr()

常规情况:

 ✏实例:  

 非常规情况:

 ✏实例:  

🔸strrchr()

✏实例:   

🔸strstr()

✏实例:   

🔸strpbrk()

 ✏实例:   

🔸strspn()

 ✏实例:   

🔸strcspn()

 ✏实例:  

🌟字符串到数值类型的转换

🔹strtod()

  ✏实例1:

 ✏实例2:

 ✏实例3: 

🔹strtol()

  ✏实例: 

🔹atoi()

   ✏实例: 

🔹atof()

  ✏实例:

🔹atol() 

 ✏实例: 

🌟 字符检查 

⭐isalpha()

 ✏实例: 

⭐isupper()

 ✏实例: 

⭐islower()

  ✏实例: 

⭐isdigit()

 ✏实例:  

⭐isxdigit()

  ✏实例:

⭐isspace()

 ✏实例: 

⭐iscntrl()

 ✏实例: 

⭐isprint()

 ✏实例: 

⭐ispunct()

✏实例:  

⭐isalnum()

 ✏实例: 

⭐isgraph()

✏实例:


🌟字符串操作

🔸strcpy()

常规情况:

函数功能:复制字符串

语法:strcpy(string_1, string_2)

函数原型:char * strcpy(char destination[], const char source[])

表示(记忆):string copy

解释说明:将string_2复制到string_1(string_2为空或string_2的长度要大于string_1)

✏实例: 

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

int main(void)
{
    char string_2[] = "Hello world";
    char string_1[20];

    strcpy(string_1, string_2);
    printf("string_2 = %s\n", string_2);
    printf("string_1 = %s\n", string_1);

    return 0;
}

输出:

非常规情况:

如果string_2的不为空且长度小于string_1,那么string_1变成string_2,string_1的字符从前面开始,删掉strlen_2个字符

✏实例:  

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

int main(void)
{
    char string_2[] = "Hello world";
    char string_1[] = "ppppp";

    strcpy(string_1, string_2);
    printf("string_2 = %s\n", string_2);
    printf("string_1 = %s\n", string_1);

    return 0;
}

输出:

 

🔸strncpy()

常规情况:

函数功能:复制指定长度字符串

语法:strcpy(string_1, string_2, num)

函数原型:char * strncpy(char destination[], const char source[], int numchars

表示(记忆):string n copy

解释说明:将string_2中的前num个字符复制后赋给string_1的前num项

✏实例:  

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

int main(void)
{
    char string_1[] = "Hello world";
    char string_2[] = "ppkkgg";

    strncpy(string_1, string_2, 2);
    printf("string_1 = %s\n", string_1);
    printf("string_2 = %s\n", string_2);

    return 0;
}

非常规情况: 

当num的值超过string_1的等于长度时,strncpy ()相当于strcpy()

当num的值超过string_1的大于长度时,运行的时候会导致缓冲区溢出的问题(不同软件的处理结果不同,下面以CLion为例)

✏实例:  

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

int main(void)
{
    char string_1[] = "Hello world";
    char string_2[] = "ppppppppppppp";

    strncpy(string_1, string_2, 12);
    printf("string_1 = %s\n", string_1);
    printf("string_2 = %s\n", string_2);

    return 0;
}

输出:

 

🔸strcat()

常规情况:

函数功能:附加(连接)字符串

语法:strcat(string_1, string_2, num)

函数原型:char *strcat(char *strDest, const char *strScr)

表示(记忆):string connect add to

解释说明:将string_2附加到string_1末尾

✏实例:  

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

int main(void)
{
    char string_1[] = "Hello world";
    char string_2[] = "pppppppp";

    strcat(string_1, string_2);
    printf("string_1 = %s\n", string_1);
    printf("string_2 = %s\n", string_2);

    return 0;
}

输出:

 

🔸strncat()

常规情况:

函数功能:附加(连接)前n个字符

语法:strncat(string_1, string_2, num)

函数原型:strncat(char target[], const char source[], int numchars)

表示(记忆):string n connect add to

解释说明:将string_2中的前num个字符附加到string_1后

✏实例:  

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

int main(void)
{
    char string_1[12] = "Hello world";
    char string_2[] = "pppppppp";

    strncat(string_1, string_2, 3);
    printf("string_1 = %s\n", string_1);
    printf("string_2 = %s\n", string_2);

    return 0;
}

输出:

 

非常规情况: 

一般来说string_1的长度要足够长来容纳附加的字符,但是我在CLion和visualC++运行时即即使初始化string_1时的字符长度小于附加后的字符串长度也不会报错 

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

int main(void)
{
    char string_1[12] = "Hello world";
    char string_2[] = "pppppppp";

    strncat(string_1, string_2, 8);
    printf("string_1 = %s\n", string_1);
    printf("string_2 = %s\n", string_2);

    return 0;
}

 输出:

🔸strlen()

常规情况:

函数功能:获取字符串长度即返回的是在字符串中’\0’前面出现的字符的个数

语法:strlen(string)

函数原型:strlen( const char string[] )

表示(记忆):string length

解释说明:获取string的长度

 ✏实例: 

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

int main(void)
{
    char string[] = "12345";

    printf("string_len = %d\n", strlen(string));

    return 0;
}

输出:

 

🔸strcmp

常规情况:

函数功能:比较两个字符串的“大小”

语法:strcmp(string_1,string_2)

函数原型:strcmp(const char firststring[], const char secondstring)

表示(记忆):string compare(比较)

解释说明:比较两个字符串的“大小”

  • 自左向右逐个按照ASCII值进行比较,直到出现不同的字符或遇’\0’为止。
  • 如果返回值 < 0,则表示 string_1 小于 sering_2。
  • 如果返回值 > 0,则表示 string_1 大于 string_2。
  • 如果返回值 = 0,则表示 string_1 等于 string_2。

  ✏实例: 

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

int main(void)
{
    char string_1[] = "abz";
    char string_2[] = "ac";

    printf("strcmp(string_1, string_2):%d\n", strcmp(string_1, string_2));
    printf("strcmp(string_2, string_1):%d\n", strcmp(string_2, string_1));
    printf("strcmp(string_1, string_1):%d\n", strcmp(string_1, string_1));
    return 0;
}

输出:

 

string_1 < string_2输出-1

string_2 > string_1输出1,

string_1 = string_1,输出0  

🔸strcasecmp()

 常规情况:

函数功能:strcasecmp函数比较string_1和stirng_2的“大小”不区分大小写。

语法:strcasecmp(string_1, string_2)

函数原型:strcasecmp(const char* sz1, const char* sz2)

表示(记忆):string case compare

解释说明:

比较两个字符串的“大小”,不区分大小写。

  • 自左向右逐个按照ASCII值进行比较,直到出现不同的字符或遇’\0’为止。
  • 如果返回值 < 0,则表示 string_1 小于 sering_2。
  • 如果返回值 > 0,则表示 string_1 大于 string_2。
  • 如果返回值 = 0,则表示 string_1 等于 string_2。

 ✏实例:  

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

int main(void)
{
    char string_1[] = "abz";
    char string_2[] = "Ac";
    char string_3[] = "ac";

    printf("strcasecmp(string_1, string_2):%d\n", strcasecmp(string_1, string_2));
    printf("strcasecmp(string_2, string_1):%d\n", strcasecmp(string_2, string_1));
    printf("strcasecmp(string_2, string_3):%d\n", strcasecmp(string_2, string_3));
    return 0;
}

输出:

 

string_1 < string_2输出-1

string_2 > string_1输出1,

string_2 = string_3,输出0  (不区分大小写,所以相等)

🔸strncmp()

常规情况:

函数功能:strcasecmp函数比较string_1和stirng_2前n个字符的“大小”,不区分大小写。

语法:strncmp(string_1, sreing_2, num)

函数原型:int strcmp(const char *cs, const char *ct)

表示(记忆):string n compare

解释说明:strcasecmp函数比较string_1和stirng_2前n个字符的“大小”,不区分大小写。

  • 自左向右逐个按照ASCII值进行比较,直到出现不同的字符或遇’\0’为止。
  • 如果返回值 < 0,则表示 string_1 小于 sering_2。
  • 如果返回值 > 0,则表示 string_1 大于 string_2。
  • 如果返回值 = 0,则表示 string_1 等于 string_2。

 ✏实例:  

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

int main(void)
{
    char string_1[] = "abzcd";
    char string_2[] = "Acbd";
    char string_3[] = "acbD";

    printf("strncasecmp(string_1, string_2):%d\n", strncasecmp(string_1, string_2, 2));
    printf("strncasecmp(string_2, string_1):%d\n", strncasecmp(string_2, string_1, 2));
    printf("strncasecmp(string_2, string_3):%d\n", strncasecmp(string_2, string_3, 2));
    return 0;
}

输出:

🔸strchr()

常规情况:

函数功能:查找字符出中指定的字符

语法:strchr(string,target)

函数原型:extern char *strchr(char *str,char character)

表示(记忆):string char

解释说明:在字符串string中寻找目标字符(一个字符)target第一次出现的位置,并返回其位置(地址指针),若失败则返回NULL。

target也可以理解为string_2.

 ✏实例:  

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

int main(void)
{
    char string[] = "abcdABC";
    char *findchar;

    findchar = strchr(string, 'A');
    printf("findchar = %s\n", findchar);

    return 0;
}

输出:

 

 非常规情况:

当传入的目标字符不是单个字符时,取传入目标字符最后一个字符作为目标字符。

 ✏实例:  

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

int main(void)
{
    char string[] = "abcdABC";
    char *findchar;

    findchar = strchr(string, 'bc');
    printf("findchar = %s\n", findchar);

    return 0;
}

输出:

 

 传入目标字符bc,取c为目标字符

🔸strrchr()

函数功能:反向查找字符出中指定的字符

语法:strrchr(string,target)

函数原型:extern char * strrchr (const char *s, int c)

表示(记忆):string reverse(反向)char

解释说明:在字符串string中反向寻找目标字符(一个字符)target第一次出现的位置,并返回其位置(地址指针),若失败则返回NULL。

✏实例:   

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

int main(void)
{
    char string[] = "abAcdABC";
    char *findchar_1, *findchar_2, *findchar_3;

    findchar_1 = strchr(string, 'A'); // 注意这是strchr函数
    findchar_2 = strrchr(string, 'A');
    findchar_3 = strchr(string, 'O');

    printf("findchar_1 = %s\n", findchar_1);
    printf("findchar_2 = %s\n", findchar_2);
    printf("findchar_3 = %s\n", findchar_3);

    return 0;
}

 输出:

​​ 

🔸strstr()

函数功能:查找找到子串在一个字符串中第一次出现的位置

语法:strstr(string,target)

函数原型:char *strstr(const char *haystack, const char *needle)

表示(记忆):string str

解释说明:在字符串string中寻找目标子串(多个字符)target第一次出现的位置,并返回其位置(地址指针),若失败则返回NULL。

✏实例:   

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

int main(void) {
    char string[] = "abAcdABC";
    char *findchar_1, *findchar_2, *findchar_3;

    findchar_1 = strstr(string, "bAc");
    findchar_2 = strstr(string, "AB");
    findchar_3 = strstr(string, "O");

    printf("findchar_1 = %s\n", findchar_1);
    printf("findchar_2 = %s\n", findchar_2);
    printf("findchar_3 = %s\n", findchar_3);

    return 0;
}

输出:

 ​​

值得注意的是: 在传入目标字串时要用双引号(strstr(string, “AB”)),或者使用变量 findchar = “AB”,strstr(string,  findchar)。使用单引号(strstr(string, ‘AB’))会报错。

当传入的目标字串长度超过原字符串时返回NULL。

🔸strpbrk()

函数功能:以⽬标字符串的所有字符作为集合target,在当前字符串查找该集合的任⼀元素

语法:strpbrk(string,target)

函数原:extern char *strpbrk(char *str1, char *str2)

表示(记忆):string pointer break

解释说明:在字符串string中寻找与集合target匹配的第一个元素,并返回第一个匹配到的string字符和后续字符,若失败则返回NULL。

 ✏实例:   

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

int main(void) {
    char string[] = "Hello world";
    char *findchar_1, *findchar_2, *findchar_3;

    findchar_1 = strpbrk(string, "ett");
    findchar_2 = strpbrk(string, "lfg");
    findchar_3 = strpbrk(string, "fg");

    printf("findchar_1 = %s\n", findchar_1);
    printf("findchar_2 = %s\n", findchar_2);
    printf("findchar_3 = %s\n", findchar_3);

    return 0;
}

输出:

 ​​

我们从输出可以知道,当查找集合中 的元素有多个与string中字符匹配时,从左到右取第一个匹配到的字符

🔸strspn()

函数功能:以⽬标字符串的所有字符作为集合,在当前字符串开头查找集合中含有的字符,返回连续字符的长度

语法:strspn(string,target)

函数原型:strspn(char const *str, char const *grouo)

表示(记忆):string span(范围)

解释说明:以⽬标字符串target的所有字符作为集合,在字符串string开头查找集合中含有的字符,返回连续字符的长度。未找到匹配元素则返回0.

 ✏实例:   

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

int main(void) {
    char string[] = "Hello world.I love C,Python.";
    int findchar_1, findchar_2, findchar_3;

    findchar_1 =  strspn(string, "Hef");
    findchar_2 = strspn(string, "Hetyl ow,");
    findchar_3 = strspn(string, "fg");

    printf("findchar_1 = %d\n", findchar_1);
    printf("findchar_2 = %d\n", findchar_2);
    printf("findchar_3 = %d\n", findchar_3);

    return 0;
}

输出:

 

这里的2表示字符串:“He”的长度

8表示字符串 :“Hello wo”的长度(空格也算是一个字符)

0表示没有在string中找到与target中所有字符匹配的字符

🔸strcspn()

函数功能:以⽬标字符串的所有字符作为集合,在当前字符串查找属于该集合的任⼀元素的第一匹配字符索引

语法:strcspn(string_1,string_2)

函数原型:extern int strcspn(char *str1,char *str2)

表示(记忆):string character span

解释说明:从左到右在字符串string_1中搜寻与string_2中字符相同的字符,并返回索引最小的字符的索引(下标)。

 ✏实例:  

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

int main(void) {
    char string[] = "Hello world.I love C,Python.";
    int findchar_1, findchar_2, findchar_3;

    findchar_1 = strcspn(string, "ef");
    findchar_2 = strcspn(string, "zwhol,");
    findchar_3 = strcspn(string, "zm");

    printf("findchar_1 = %d\n", findchar_1);
    printf("findchar_2 = %d\n", findchar_2);
    printf("findchar_3 = %d\n", findchar_3);
    printf("string_len = %d", strlen(string)); // 获取string长度

    // 空格和标点符号都算一个字符
    return 0;
}

输出:

 

对于findchar_1,“ef”和string共有的只有“e”,所以返回“e”在string中的下标1

对于findchar_2,“zwhol ”和sreing共有的有“w”,“h”,“o”,“l”,其中在string中下标最小的字符为“l”,所以返回“l”的坐标2

对于findchar_3,“zm”和string没有共有的元素,所以strcspn返回string的字符串长度

🌟字符串到数值类型的转换

🔹strtod()

函数功能:从字符串 string 中转换 double 类型数值,并将后续的字符串指针存储到 address 指向的 char* 类型存储。

语法:strtod(string,&address)

函数原型:double strtod(const char *nptr, char **endptr)

表示(记忆):string to digital(数值)

解释说明:

        strtod()会遍历 string 字符串,自动跳过空格字符,直到遇上数字或正负符号才开始做转换,到出现非数字或字符串结束时('\0')才结束转换,并将结果返回。

       若string不为NULL,则会将遇到不合条件而终止的string中的字符指针由address传回。其中参数string字符串可包含正负号、小数点或E(e)(科学计数法)来表示指数部分。

  ✏实例1:

int main() {
    char *address;
    char string_1[] = "123.456";
    char string_2[] = "1234.56Hello";
    char string_3[] = "-123.56e4";
    char string_4[] = "123a4.56Hello";

    printf("string_1 = %lf\n", strtod(string_1, NULL));
    printf("string_2 = %lf\n", strtod(string_2, &address));
    printf("address = %s\n", address);
    printf("string_3 = %lf\n", strtod(string_3, NULL));
    printf("string_2 = %lf\n", strtod(string_4, &address));
    printf("address = %s\n", address);

    return 0;
}

 输出:

1.对于string_1: strod()的第二个参数可以设为NULL

2.对于string_2:&address用来储存"非数值"字符,并且address可以作为变量输出

3.对于string_3:strtod()的string参数可用负号和E(e)科学记数法表示

4.对于string_4:当遍历到第一个不属于数值类型的字符串时,当前非数值字符和后续的字符串指针存储到 address 指向的 char* 类型存储

 ✏实例2:

# include <stdlib.h>
# include <stdio.h>

int main()
{
    char *address;
    char string_1[] = "123.456";
    char string_2[] = "1234.56Hello";
    char string_3[] = "-123.56e4";

    printf( "string_1 = %lf\n", strtod(string_1, &address));
    printf( "string_2 = %lf\n", strtod(string_2, &address));
    printf( "address = %s\n", address);
    printf( "string_3 = %lf\n", strtod(string_3, &address));
    printf( "address = %s\n", address);

    return 0;
}

输出:

 

注意例题中的三个&address其实是不同的,第二个&address“储存着”Hello,而string_3中无数值之外的字符所以第三个&address为NULL

 ✏实例3: 

# include <stdlib.h>
# include <stdio.h>

int main()
{
    char *address;
    char string_1[] = "123.456";
    char string_2[] = "1234.56Hello";
    char string_3[] = "-123.56e4";

    printf( "string_1 = %lf\n", strtod(string_1, &address));
    printf( "string_2 = %lf\n", strtod(string_2, NULL));
    printf( "address = %s\n", address);
    printf( "string_3 = %lf\n", strtod(string_3, &address));

    return 0;
}

输出:

 

 如果想要输出字符串中不符合strtod()的字符,需要指定其储存地址,一般将“地址”也就是第二个参数初始化为字符类型。

🔹strtol()

函数功能:从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整型进制,设置为 0 以根据特定格式判断所⽤进
制,0x, 0X 前缀以解释为⼗六进制格式整型,0 前缀以解释为⼋进制格式整型

语法:strtol(string,endstr,base)

函数原型:long int strtol (const char* str, char** endptr, int base)

表示(记忆):string to long

解释说明:

str 为要转换的字符串,endstr 指向不能转换的第一个字符的地址,base 为字符串 str 所采用的进制。

参数 base 范围从2 至36或0。如base 值为10 则采用10 进制,若base 值为16 则采用16 进制。

返回值为将base进制的字符串转化为long int类型的十进制数。

  ✏实例: 

# include <stdlib.h>
# include <stdio.h>

int main()
{
    char *endstr;
    long myNum;
    char string_1[] = "100Hello";
    char string_2[] = "16a23Hello";

    long result_1 = strtol(string_1, &endstr, 2);
    printf("result_1 = %ld\n", result_1);
    printf("endstr = %s\n", endstr);

    long result_2 = strtol(string_1, &endstr, 8);
    printf("result_2 = %ld\n", result_2);
    printf("endstr = %s\n", endstr);

    long result_3 = strtol(string_1, &endstr, 16);
    printf("result_3 = %ld\n", result_3);
    printf("endstr = %s\n", endstr);

    long result_4 = strtol(string_2, &endstr, 8);
    printf("result_4 = %ld\n", result_4);
    printf("endstr = %s\n", endstr);
}

输出:

 

二进制100转换为十进制为2

八进制100转换为十进制为64

十六进制100转换为十进制为256

八进制16转换为十进制为14

那么base可以理解为将string中数值的进制看成base(如,base = 2,base = 8)进制,strtol()将其转换成十进制的长整型返回。

endstr 指向不能转换的第一个字符的地址,如案例中的H和a

🔹atoi()

函数功能:将字符串转换到 int 整型

语法:atoi(string)

表示(记忆):ascii to integer

函数原型:int atoi(const char *nptr)

表示(记忆):string to integer

解释说明:atoi() 函数会扫描参数string字符串,会跳过前面的空白字符(例如空格,tab缩进)等,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,如果 string不能转换成 int 或者 string为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。str字符串可包含正负号、小数点或E(e)来表示指数部分。

   ✏实例: 

# include "stdio.h"
# include "stdlib.h"

int main(void )
{
    char string_1[] = "123abc";
    char string_2[] = "1a23bc";
    char string_3[] = "-1.5ab";

    printf( "string_1 = %d\n", atoi(string_1));
    printf( "string_2 = %d\n", atoi(string_2));
    printf( "string_3 = %d\n", atoi(string_3));
    printf( "string_3 = %f\n", atoi(string_3)); // 以浮点数输出

    return 0;
}

 输出:

abc等非整数型字符都是不符合转化要求的,如果尝试以浮点数输出atoi(string)的值会输出0 

🔹atof()

函数功能:将字符串转换到 float 浮点型

语法:atof(string)

函数原型: double atof(const char *nptr)

表示(记忆):ascii to float

解释说明:atof() 函数会扫描参数string字符串,会跳过前面的空白字符(例如空格,tab缩进)等,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,如果 string不能转换成 float 或者 string为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。str字符串可包含正负号、小数点或E(e)来表示指数部分。

  ✏实例:

# include "stdio.h"
# include "stdlib.h"

int main(void ) {
    char string_1[] = "1.23abc";
    char string_2[] = "1a23bc";
    char string_3[] = "-7.5ab";
    char string_4[] = "123e4";

    printf("string_1 = %f\n", atof(string_1));
    printf("string_2 = %f\n", atof(string_2));
    printf("string_3 = %f\n", atof(string_3));
    printf("string_3 = %d\n", atof(string_3)); // 以整型输出
    printf("string_4 = %f\n", atof(string_4));

    return 0;
}

输出:

 

 abc等非整数型字符都是不符合转化要求的,如果尝试以整型输出atof(string)的值会输出0 

🔹atol() 

函数功能:将字符串转换到 long 整型

语法:atol(string)

函数原型: long atol(const char *nptr)

表示(记忆):ascii to long integer

解释说明:atol() 函数会扫描参数string字符串,会跳过前面的空白字符(例如空格,tab缩进)等,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,如果 string不能转换成 long 整型 或者 string为空字符串,那么将返回 0 。特别注意,该函数要求被转换的字符串是按十进制数理解的。str字符串可包含正负号、小数点或E(e)来表示指数部分。

 ✏实例: 

# include "stdio.h"
# include "stdlib.h"

int main(void ) {
    char string_1[] = "1.23abc";
    char string_2[] = "1a23bc";
    char string_3[] = "-7.5ab";
    char string_4[] = "123e4";

    printf("string_1 = %ld\n", atol(string_1));
    printf("string_2 = %ld\n", atol(string_2));
    printf("string_3 = %ld\n", atol(string_3));
    printf("string_3 = %f\n", atol(string_3)); // 以浮点型型输出
    printf("string_4 = %ld\n", atol(string_4));

    return 0;
}

 输出:

 abc等非整数型字符都是不符合转化要求的,如果尝试以浮点型输出atof(string)的值会输出0  

🌟 字符检查 

⭐isalpha()

函数功能:用于判断字符是否为字母(a-z和A-Z)

语法:isalpha(string)

函数原型:extern int isalpha (int c)

表示(记忆):is alpha(阿尔法希腊第一个字母)

解释说明:传入字符string并判断其是否为字母

返回值:0-不是字母,非0-是字母。

 ✏实例: 

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isalpha('a'));
    printf("result_2 = %d\n", isalpha('2'));
    printf("result_3 = %d\n", isalpha('?'));
    printf("result_4 = %d\n", isalpha('A'));

    return 0;
}

输出:

 

⭐isupper()

函数功能:用于判断字符是否为大写字母(A-Z)

语法:isupper(string)

函数原型:extern int isalpha (int c)

表示(记忆):is alpha(阿尔法希腊第一个字母)

解释说明:

传入字符string并判断其是否为大写字母

返回值:0表示不是大写字母,非0表示是大写字母。

 ✏实例: 

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isupper('a'));
    printf("result_2 = %d\n", isupper('2'));
    printf("result_3 = %d\n", isupper('?'));
    printf("result_4 = %d\n", isupper('A'));
    printf("result_5 = %d\n", isupper('B'));

    return 0;
}

 输出:

⭐islower()

函数功能:用于判断字符是否为小写字母(a-z)

语法:islower(string)

表示(记忆):

解释说明:

传入字符string并判断其是否为小写字母

返回值:0表示不是大写字母,非0表示是小写字母。

  ✏实例: 

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", islower('a'));
    printf("result_2 = %d\n", islower('2'));
    printf("result_3 = %d\n", islower('?'));
    printf("result_4 = %d\n", islower('A'));
    printf("result_5 = %d\n", islower('b'));

    return 0;
}

输出:

 

⭐isdigit()

函数功能:用于判断字符是否为数字

语法:isdigit(string)

表示(记忆):

解释说明:

传入string并判断其是否为数字

返回值:0表示不是数字,非0表示是数字。

 ✏实例:  

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isdigit('1'));
    printf("result_2 = %d\n", isdigit('2'));
    printf("result_3 = %d\n", isdigit('?'));
    printf("result_4 = %d\n", isdigit('A'));

    return 0;
}

 输出:

⭐isxdigit()

函数功能:检查是否为⼗六进制数字表⽰的有效字符

语法:isxdigit(string)

表示(记忆):

解释说明:

传入sreing并判断其是否为⼗六进制数字表⽰的有效字符

返回值:0表示不是⼗六进制数字表⽰的有效字符,非0表示⼗六进制数字表⽰的有效字符。

  ✏实例:

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isxdigit('1'));
    printf("result_2 = %d\n", isxdigit('2'));
    printf("result_3 = %d\n", isxdigit('?'));
    printf("result_4 = %d\n", isxdigit('A'));
    printf("result_4 = %d\n", isxdigit('a'));
    printf("result_5   = %d\n", isxdigit('z'));

    return 0;
}

输出:

 

十六进制中A,B,C,D,E,F(字母不区分大小写)这六个字母来分别表示10,11,12,13,14,15。

所以 案例中的A和a虽然是字母但也是⼗六进制数字表⽰的有效字符,而z或F(f)后的字符都不是⼗六进制数字表⽰的有效字符

⭐isspace()

函数功能:判断字符是否为空白符

语法:isspace(string)

表示(记忆):

解释说明:空白符指:空格、水平制表、垂直制表、换页、回车和换行符。

传入sreing并判断其是否为空白符

返回值:0表示不是空白符,非0表示空白符。

 ✏实例: 

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isspace('1'));
    printf("result_2 = %d\n", isspace('z'));
    printf("result_3 = %d\n", isspace(' '));
    printf("result_4 = %d\n", isspace('\n'));
    printf("result_5 = %d\n", isspace('\t'));


    return 0;
}

输出:

 

⭐iscntrl()

函数功能:判断字符是否为控制字符

语法:isspace(string)

表示(记忆):

解释说明:isspace判断传入string是否为控制符返回值:0表示不是控制符,非0表示控制符。

ASCII码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等。

控制字符在屏幕上显示时不占位(看不见);显示时占位(能看见)的字符叫打印字符

 ✏实例: 

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", iscntrl('1'));
    printf("result_2 = %d\n", iscntrl('z'));
    printf("result_3 = %d\n", iscntrl(' '));
    printf("result_4 = %d\n", iscntrl('\n'));
    printf("result_5 = %d\n", iscntrl('\t'));

    return 0;
}

输出:

 

⭐isprint()

函数功能:判断字符是否为可打印字符

语法:isprint(string)

表示(记忆):

解释说明:isprint判断传入string是否为可打印字符:0表示不是可打印字符,非0表示可打印字符。

可打印字符是指除ASCII码0~31及127(共33个)是控制字符或通信专用字符,剩余的都属于可打印字符。

 ✏实例: 

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isprint('1'));
    printf("result_2 = %d\n", isprint('z'));
    printf("result_3 = %d\n", isprint(' '));
    printf("result_4 = %d\n", isprint('\n'));
    printf("result_5 = %d\n", isprint('\t'));

    return 0;
}

输出:

 

isprint()和iscntrl()相反

⭐ispunct()

函数功能:判断字符是否为标点符号

语法:ispunct(string)

表示(记忆):

解释说明:ispunct判断传入string是否为标点符号:若 c 为标点符号或特殊符号(非空格、非数字和非英文字母)返回非 0 值,否则返回 0。

✏实例:  

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", ispunct('1'));
    printf("result_2 = %d\n", ispunct('z'));
    printf("result_3 = %d\n", ispunct('.'));
    printf("result_4 = %d\n", ispunct('?'));
    printf("result_5 = %d\n", ispunct('\t'));

    return 0;
}

 输出:

⭐isalnum()

函数功能:判断字符是否为字母或数字

语法:isalnum(string)

表示(记忆):is alnum

解释说明:isalnum判断传入string是否为字母或数字:0表示不是字母或数字,非0表示字母或数字。

 ✏实例: 

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isalnum('1'));
    printf("result_2 = %d\n", isalnum('z'));
    printf("result_3 = %d\n", isalnum('.'));
    printf("result_4 = %d\n", isalnum('?'));
    printf("result_5 = %d\n", isalnum('\t'));

    return 0;
}

输出:

 

⭐isgraph()

函数功能:判断字符是否为图形字符

语法:isgraph(string)

函数原型:int isgraph( int ch)

表示(记忆):is graph(图表)

解释说明:isgraph判断传入string其是否为图形字符:0表示不是图形字符,非0表示图形字符。

图形字符:一般从

✏实例:

# include "stdio.h"
# include "ctype.h"

int main(void ) {

    printf("result_1 = %d\n", isgraph(';'));
    printf("result_2 = %d\n", isgraph(' '));
    printf("result_3 = %d\n", isgraph('~'));
    printf("result_4 = %d\n", isgraph('$'));
    printf("result_5 = %d\n", isgraph('\t'));

    return 0;
}

输出:

 如果给isgraph()传递中文会返回NULL

printf("result_2 = %s\n", isgraph('你'));

输出:result_2 = (null)

创作不易,如果有用===》素质三连(拒绝bp)

今天就到这,明天见。🚀

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

亖夕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值