c语言库函数总结----ctype.h库

思维导图大纲

在这里插入图片描述

前言

C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和映射字符。
这些函数接受 int 作为参数,它的值必须是 EOF 或表示为一个无符号字符。
如果参数 c 满足描述的条件,则这些函数返回非零(true)。如果参数 c 不满足描述的条件,则这些函数返回零。
在给出这个函数库的功能后,我们首先对字符的类型进行分类:

序号字符类 & 描述
1数字
完整的数字集合 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
2十六进制数字
集合 { 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f }
3小写字母
集合 { a b c d e f g h i j k l m n o p q r s t u v w x y z }
4大写字母
集合 {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z }
5字母
小写字母和大写字母的集合
6字母数字字符
数字、小写字母和大写字母的集合
7标点符号字符
集合 ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
8图形字符
字母数字字符和标点符号字符的集合
9空格字符
制表符、换行符、垂直制表符、换页符、回车符、空格符的集合。
10可打印字符
字母数字字符、标点符号字符和空格字符的集合。
11控制字符
在 ASCII 编码中,这些字符的八进制代码是从 000 到 037,以及 177(DEL)。
12空白字符
包括空格符和制表符。
13字母字符
小写字母和大写字母的集合。
  1. int isalnum(int c)
    函数原型: int isalnum(int c)
    函数功能: 该函数检查所传的字符是否是字母和数字。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isalnum(int c)
//函数功能: 该函数检查所传的字符是否是字母和数字。

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

int main()
{
	int var1 = 'd';
	int var2 = '2';
	int var3 = '\t';
	int var4 = ' ';

	if (isalnum(var1))
	{
		printf("var1 = |%c| 是字母数字\n", var1);
	}
	else
	{
		printf("var1 = |%c| 不是字母数字\n", var1);
	}
	if (isalnum(var2))
	{
		printf("var2 = |%c| 是字母数字\n", var2);
	}
	else
	{
		printf("var2 = |%c| 不是字母数字\n", var2);
	}
	if (isalnum(var3))
	{
		printf("var3 = |%c| 是字母数字\n", var3);
	}
	else
	{
		printf("var3 = |%c| 不是字母数字\n", var3);
	}
	if (isalnum(var4))
	{
		printf("var4 = |%c| 是字母数字\n", var4);
	}
	else
	{
		printf("var4 = |%c| 不是字母数字\n", var4);
	}

	return 0;
}
  1. int isalpha(int c)
    函数原型: int isalpha(int c)
    函数功能: 该函数检查所传的字符是否是字母,字母的是英语(alphabet)
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isalpha(int c)
//函数功能: 该函数检查所传的字符是否是字母。

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

int main()
{
	int var1 = 'd';
	int var2 = '2';
	int var3 = '\t';
	int var4 = ' ';

	if (isalpha(var1))
	{
		printf("var1 = |%c| 是一个字母\n", var1);
	}
	else
	{
		printf("var1 = |%c| 不是一个字母\n", var1);
	}
	if (isalpha(var2))
	{
		printf("var2 = |%c| 是一个字母\n", var2);
	}
	else
	{
		printf("var2 = |%c| 不是一个字母\n", var2);
	}
	if (isalpha(var3))
	{
		printf("var3 = |%c| 是一个字母\n", var3);
	}
	else
	{
		printf("var3 = |%c| 不是一个字母\n", var3);
	}
	if (isalpha(var4))
	{
		printf("var4 = |%c| 是一个字母\n", var4);
	}
	else
	{
		printf("var4 = |%c| 不是一个字母\n", var4);
	}

	return 0;
}

测试结果:
在这里插入图片描述

  1. int iscntrl(int c)
    函数原型: int iscntrl(int c)
    函数功能: 该函数检查所传的字符是否是控制字符。根据标准 ASCII 字符集,控制字符的 ASCII 编码介于 0x00 (NUL) 和 0x1f (US) 之间,以及 0x7f (DEL),某些平台的特定编译器实现还可以在扩展字符集(0x7f 以上)中定义额外的控制字符。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int iscntrl(int c)
//函数功能: 该函数检查所传的字符是否是控制字符。

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

int main()
{
	int i = 0, j = 0;
	char str1[] = "all \a about \t programming";
	char str2[] = "Runoob \n tutorials";

	/* 输出字符串直到控制字符 \a */
	while (!iscntrl(str1[i]))
	{
		putchar(str1[i]);
		i++;
	}

	/* 输出字符串直到控制字符 \n */
	while (!iscntrl(str2[j]))
	{
		putchar(str2[j]);
		j++;
	}

	return 0;
}

在这里插入图片描述

  1. int isdigit(int c)
    函数原型: int isdigit(int c)
    函数功能: 该函数检查所传的字符是否是十进制数字
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isdigit(int c)
//函数功能: 该函数检查所传的字符是否是十进制数字

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

int main()
{
	int var1 = 'h';
	int var2 = '2';

	if (isdigit(var1))
	{
		printf("var1 = |%c| 是一个数字\n", var1);
	}
	else
	{
		printf("var1 = |%c| 不是一个数字\n", var1);
	}
	if (isdigit(var2))
	{
		printf("var2 = |%c| 是一个数字\n", var2);
	}
	else
	{
		printf("var2 = |%c| 不是一个数字\n", var2);
	}

	return 0;
}

在这里插入图片描述

  1. int isgraph(int c)
    函数原型: int isgraph(int c)
    函数功能: 该函数检查所传的字符是否有图形表示法,比如空格就无法利用图形表示,其他的符号就可以利用图形进行表示。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isgraph(int c)
//函数功能: 该函数检查所传的字符是否有图形表示法。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int var1 = '3';
	int var2 = 'm';
	int var3 = ' ';

	if (isgraph(var1))
	{
		printf("var1 = |%c| 是可打印的\n", var1);
	}
	else
	{
		printf("var1 = |%c| 是不可打印的\n", var1);
	}
	if (isgraph(var2))
	{
		printf("var2 = |%c| 是可打印的\n", var2);
	}
	else
	{
		printf("var2 = |%c| 是不可打印的\n", var2);
	}
	if (isgraph(var3))
	{
		printf("var3 = |%c| 是可打印的\n", var3);
	}
	else
	{
		printf("var3 = |%c| 是不可打印的\n", var3);
	}

	return 0;
}

测试结果:
在这里插入图片描述

//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isgraph(int c)
//功能:    打印所有可以使用图形表示法的符号。
#include <stdio.h>
#include <ctype.h>
#include <stdio.h>
#include <ctype.h>
int main()
{
    int i;
    printf("C 语言中所有图形字符: \n");
    for (i=0;i<=127;++i)
    {
        if (isgraph(i)!=0)
            printf("%c ",i);
    }
    return 0;
}

测试结果:
在这里插入图片描述

  1. int islower(int c)
    函数原型: int islower(int c)
    函数功能: C 库函数 int islower(int c) 检查所传的字符是否是小写字母,其实常规使用判断ASCII码的方法来进行判断,但是从可读性而言使用库函数更好一些。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int islower(int c)
//函数功能: C 库函数 int islower(int c) 检查所传的字符是否是小写字母。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int var1 = 'Q';
	int var2 = 'q';
	int var3 = '3';

	if (islower(var1))
	{
		printf("var1 = |%c| 是小写字母\n", var1);
	}
	else
	{
		printf("var1 = |%c| 不是小写字母\n", var1);
	}
	if (islower(var2))
	{
		printf("var2 = |%c| 是小写字母\n", var2);
	}
	else
	{
		printf("var2 = |%c| 不是小写字母\n", var2);
	}
	if (islower(var3))
	{
		printf("var3 = |%c| 是小写字母\n", var3);
	}
	else
	{
		printf("var3 = |%c| 不是小写字母\n", var3);
	}

	return(0);
}

测试结果:
在这里插入图片描述

  1. int isprint(int c)
    函数原型: int isprint(int c)
    函数功能: 该函数检查所传的字符是否是可打印的。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isprint(int c)
//函数功能: 该函数检查所传的字符是否是可打印的。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int var1 = 'k';
	int var2 = '8';
	int var3 = '\t';
	int var4 = ' ';

	if (isprint(var1))
	{
		printf("var1 = |%c| 是可打印的\n", var1);
	}
	else
	{
		printf("var1 = |%c| 是不可打印的\n", var1);
	}
	if (isprint(var2))
	{
		printf("var2 = |%c| 是可打印的\n", var2);
	}
	else
	{
		printf("var2 = |%c| 是不可打印的\n", var2);
	}
	if (isprint(var3))
	{
		printf("var3 = |%c| 是可打印的\n", var3);
	}
	else
	{
		printf("var3 = |%c| 是不可打印的\n", var3);
	}
	if (isprint(var4))
	{
		printf("var4 = |%c| 是可打印的\n", var4);
	}
	else
	{
		printf("var4 = |%c| 是不可打印的\n", var4);
	}

	return(0);
}

测试结果:
在这里插入图片描述

  1. int ispunct(int c)
    函数原型: int ispunct(int c)
    函数功能: 该函数检查所传的字符是否是标点符号字符。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int ispunct(int c)
//函数功能: 该函数检查所传的字符是否是标点符号字符。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int var1 = 't';
	int var2 = '1';
	int var3 = '/';
	int var4 = ' ';

	if (ispunct(var1))
	{
		printf("var1 = |%c| 是标点符号字符\n", var1);
	}
	else
	{
		printf("var1 = |%c| 不是标点符号字符\n", var1);
	}
	if (ispunct(var2))
	{
		printf("var2 = |%c| 是标点符号字符\n", var2);
	}
	else
	{
		printf("var2 = |%c| 不是标点符号字符\n", var2);
	}
	if (ispunct(var3))
	{
		printf("var3 = |%c| 是标点符号字符\n", var3);
	}
	else
	{
		printf("var3 = |%c| 不是标点符号字符\n", var3);
	}
	if (ispunct(var4))
	{
		printf("var4 = |%c| 是标点符号字符\n", var4);
	}
	else
	{
		printf("var4 = |%c| 不是标点符号字符\n", var4);
	}

	return 0;
}

测试结果:

在这里插入图片描述

  1. int isspace(int c)
    函数原型: int isspace(int c)
    函数功能: 该函数检查所传的字符是否是空白字符。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isspace(int c)
//函数功能: 该函数检查所传的字符是否是空白字符。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int var1 = 't';
	int var2 = '1';
	int var3 = ' ';

	if (isspace(var1))
	{
		printf("var1 = |%c| 是空白字符\n", var1);
	}
	else
	{
		printf("var1 = |%c| 不是空白字符\n", var1);
	}
	if (isspace(var2))
	{
		printf("var2 = |%c| 是空白字符\n", var2);
	}
	else
	{
		printf("var2 = |%c| 不是空白字符\n", var2);
	}
	if (isspace(var3))
	{
		printf("var3 = |%c| 是空白字符\n", var3);
	}
	else
	{
		printf("var3 = |%c| 不是空白字符\n", var3);
	}

	return(0);
}

测试结果:
在这里插入图片描述

  1. int isupper(int c);
    函数原型: int isupper(int c);
    函数功能: C 库函数 int isupper(int c) 检查所传的字符是否是大写字母。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isupper(int c);
//函数功能: C 库函数 int isupper(int c) 检查所传的字符是否是大写字母。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int var1 = 'M';
	int var2 = 'm';
	int var3 = '3';

	if (isupper(var1))
	{
		printf("var1 = |%c| 是大写字母\n", var1);
	}
	else
	{
		printf("var1 = |%c| 不是大写字母\n", var1);
	}
	if (isupper(var2))
	{
		printf("var2 = |%c| 是大写字母\n", var2);
	}
	else
	{
		printf("var2 = |%c| 不是大写字母\n", var2);
	}
	if (isupper(var3))
	{
		printf("var3 = |%c| 是大写字母\n", var3);
	}
	else
	{
		printf("var3 = |%c| 不是大写字母\n", var3);
	}

	return(0);
}

测试结果:
在这里插入图片描述

  1. int isxdigit(int c)
    函数原型: int isxdigit(int c)
    函数功能: 该函数检查所传的字符是否是十六进制数字。
    十六进制一般用数字 0 到 9 和字母 A 到 F(或 a~f)表示,其中 A~F 表示 10~15: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int isxdigit(int c)
//函数功能: 该函数检查所传的字符是否是十六进制数字。
#include <stdio.h>
#include <ctype.h>

int main()
{
	char var1[] = "tuts";
	char var2[] = "0xE";

	if (isxdigit(var1[0]))
	{
		printf("var1 = |%s| 是十六进制数字\n", var1);
	}
	else
	{
		printf("var1 = |%s| 不是十六进制数字\n", var1);
	}

	if (isxdigit(var2[0]))
	{
		printf("var2 = |%s| 是十六进制数字\n", var2);
	}
	else
	{
		printf("var2 = |%s| 不是十六进制数字\n", var2);
	}

	return 0;
}

测试结果:
在这里插入图片描述
在ctype.h库除了包含了11个判断使用的函数外,还包括两个常用的转化函数。

  1. int tolower(int c)
    函数原型: int tolower(int c)
    函数功能: 该函数把大写字母转换为小写字母。
 //时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int tolower(int c)
//函数功能: 该函数把大写字母转换为小写字母。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;
	char c;
	char str[] = "RUNOOB";

	while (str[i])
	{
		putchar(tolower(str[i]));
		i++;
	}

	return 0;
}

测试结果:
在这里插入图片描述

  1. int toupper(int c)
    函数原型:int toupper(int c)
    函数功能: 该函数把小写字母转换为大写字母。
//时间:2019年11月18日
//作者:Kroner
//编译环境: VS 2019
//库函数	 ctype.h
//函数原型: int tolower(int c)
//函数功能: 该函数把大写字母转换为小写字母。
#include <stdio.h>
#include <ctype.h>

int main()
{
	int i = 0;
	char c;
	char str[] = "abcdef";

	while (str[i])
	{
		putchar(toupper(str[i]));
		i++;
	}

	return 0;
}

测试结果:
在这里插入图片描述

  • 12
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
我理解你的问题了。实现表达式求解需要用到一个栈来存储运算符和操作数,并按照一定的优先级进行计算。以下是一个示例程序,其中用到了几个重要的栈库函数(如stack_push、stack_pop等): ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> typedef struct { int capacity; int top; int* data; } Stack; Stack* stack_new(int capacity) { Stack* s = (Stack*)malloc(sizeof(Stack)); s->capacity = capacity; s->top = -1; s->data = (int*)malloc(capacity * sizeof(int)); return s; } void stack_push(Stack* s, int value) { if (s->top == s->capacity - 1) { fprintf(stderr, "Error: stack is full.\n"); exit(1); } s->top++; s->data[s->top] = value; } int stack_pop(Stack* s) { if (s->top == -1) { fprintf(stderr, "Error: stack is empty.\n"); exit(1); } int value = s->data[s->top]; s->top--; return value; } int stack_top(Stack* s) { if (s->top == -1) { fprintf(stderr, "Error: stack is empty.\n"); exit(1); } return s->data[s->top]; } int is_operator(char ch) { return ch == '+' || ch == '-' || ch == '*' || ch == '/'; } int operator_precedence(char op) { switch (op) { case '+': case '-': return 1; case '*': case '/': return 2; default: fprintf(stderr, "Error: unsupported operator '%c'.\n", op); exit(1); } } int evaluate_expression(char* expression) { Stack* operands = stack_new(strlen(expression)); Stack* operators = stack_new(strlen(expression)); int i = 0; while (expression[i]) { if (isdigit(expression[i])) { int value = expression[i] - '0'; i++; while (isdigit(expression[i])) { value = value * 10 + (expression[i] - '0'); i++; } stack_push(operands, value); } else if (is_operator(expression[i])) { while (!stack_top(operators)) { char op = stack_top(operators); if (operator_precedence(op) >= operator_precedence(expression[i])) { int b = stack_pop(operands); int a = stack_pop(operands); switch (op) { case '+': stack_push(operands, a + b); break; case '-': stack_push(operands, a - b); break; case '*': stack_push(operands, a * b); break; case '/': stack_push(operands, a / b); break; default: fprintf(stderr, "Error: unsupported operator '%c'.\n", op); exit(1); } stack_pop(operators); } else { break; } } stack_push(operators, expression[i]); i++; } else if (isspace(expression[i])) { i++; } else { fprintf(stderr, "Error: invalid character '%c'.\n", expression[i]); exit(1); } } while (!stack_top(operators)) { char op = stack_top(operators); int b = stack_pop(operands); int a = stack_pop(operands); switch (op) { case '+': stack_push(operands, a + b); break; case '-': stack_push(operands, a - b); break; case '*': stack_push(operands, a * b); break; case '/': stack_push(operands, a / b); break; default: fprintf(stderr, "Error: unsupported operator '%c'.\n", op); exit(1); } stack_pop(operators); } int result = stack_pop(operands); free(operands->data); free(operands); free(operators->data); free(operators); return result; } int main() { char* expression = "3 * ( 4 + 5 ) - 6 / 2"; int result = evaluate_expression(expression); printf("%s = %d\n", expression, result); return 0; } ``` 这个程序能够处理带括号的表达式,并按照正确的优先级进行计算。你可以尝试将其复制到本地环境中运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值