C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使⽤都需要包含一个头文件是ctype.h
。
函数 | 如果他的参数符合下列条件就返回真 |
---|---|
iscntrl | 任何控制符 |
isspace | 空白字符:空格‘’,换页‘\f’,换行‘\n’,回车‘\r’,制表符‘\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 | 标点符号,任何不属于数字或者字母的图形字符 |
isgraph | 任何图形字符 |
islower
在没有学islower
以前,我们判断参数是否是小写字母的,我们用到的条件是if (ch >= 'a' && ch <= 'z')
,而islower
直接可以判断。
islower
是用来判断参数是否是小写字母,如果是小写字母返回非0的值,如果不是小写字母返回0。
#include <ctype.h>
#include <stdio.h>
int main()
{
int ret = islower('Q');
printf("%d\n", ret);
return 0;
}
结果显然Q不是小写字母,所以返回的就是0。
isupper
isupper
是用来判断参数是否是大写字母的,如果是返回非0的值,如果不是返回0。
#include <ctype.h>
#include <stdio.h>
int main()
{
int ret = isupper('q');
printf("%d\n", ret);
return 0;
}
结果显然q不是大写字母,所以返回的就是0。
isdigit
isdigit
是用来判断参数是0-9的数字,如果是返回非0的值,如果不是返回0。
#include <ctype.h>
#include <stdio.h>
{
int ret = isdigit('w');
printf("%d\n", ret);
return 0;
}
而W显然不是数字,顾返回0。
我们知道在C语言中‘A’(65)与‘a’(97)相差32,‘B’与‘b’也相差32,就是说大小写字母相差32。 我们要实现小写转大写,首先要遍历字符串,然后发现小写字母,最后将它们都转化为大写。
在遍历字符串,就要知道字符串的长度,我们用strlen
求字符串长度,而字符串的结束标志是\0,strlen统计的是\0之前出现的字符的个数。
举个列子就知道了
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdef";
//a b c d e f \0
size_t len = strlen(arr);
printf("%zd\n", len);
return 0;
}
注意的是在使用strlen函数时:1. strlen函数要正确获得字符串长度的话,字符串中必须得有\0,2. 要注意strlen的返回值类型是size_t。 举例说明一下
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdef";
if (strlen("abc") - strlen("abcdef") > 0)
printf(">\n");
else
printf("<=\n");
return 0;
}
我们会觉得strlen(“abc”) 为3,而strlen(“abcdef”)为6,应该是<=,怎么是>呢? 这就是上面提到的strlen的返回值类型是size_t。
当我们知道字符串的长度,我们要将字符串中的小写字母转大写的代码实现:
#include <ctype.h>
#include <stdio.h>
int main()
{
char str[] = "i am A Student";
size_t len = strlen(str);//14
size_t i = 0;
for (i = 0; i < len; i++)
{
if (islower(str[i]))
{
str[i] = str[i] - 32;
}
}
printf("%s\n", str);
return 0;
}
结果如下:
在上面的例子中将字符串中的小写字母转大写,需要减32,那库函数中有没有直接实现大小字母转化的函数呢? 答案当然是有,下面我们就介绍一下字符转换函数。
1.int tolower ( int c )
; //将参数传进去的大写字母转小写
2.int toupper ( int c )
; //将参数传进去的小写字母转大写
上面的代码,我们将小写转大写,是-32完成的效果,有了转换函数,就可以直接使用toupper
函数。
int main()
{
char str[] = "i am A Student";
size_t len = strlen(str);//14
size_t i = 0;
for (i = 0; i < len; i++)
{
if (islower(str[i]))
{
str[i] = toupper(str[i]);
}
}
printf("%s\n", str);
return 0;
}
最终结果与上面的一样。