前言
字符函数是C语言中专门用来处理字符的函数,再C语言中,我们有时需要大量的处理有关字符的问题,所以字符函数就由此应运而生,接下来我来为大家简单介绍一下字符函数。
一.字符分类函数
函数 | 如果它的参数满足下列条件就返回真 |
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 | 任何图形字符 |
isprint | 任何可打印字符,包括图形字符和空白字符 |
接下来,我会举几个字符分类函数的例子,帮助大家理解。
1.iscntrl函数
iscntrl函数的作用是识别控制字符,传来的参数如果是控制字符则返回真,即非0值,否则返回0
//int iscntrl(int c)
//只要参数是控制字符,就返回非0值,否之返回0
//实际上传给iscntrl的是该字符的ASCII码值int main()
{int ret1 = iscntrl('\t');//'\t'是控制字符,所以返回非0值int ret2 = iscntrl('x');//'x'不是控制字符,所以返回0printf("%d %d\n", ret1,ret2);return 0;
}
结果:
2.isspace函数
isspace函数的作用是识别空白字符,只要是空白字符就返回真,非0;否则返回假,0
//int isspace(int c) 只要参数是空白字符就返回非0值,否之返回0
int main()
{int ret1 = isspace('\n');//'\n'换行符是空白字符,所以会返回非0值int ret2 = isspace('a');//'a'是可打印字符,不是空白字符,所以返回0printf("%d %d\n", ret1,ret2);return 0;
}
结果为:
3.isdigit函数
isdigit是识别数字字符函数,只要传来的字符参数属于0~9,就返回非0值,否则返回0
//int isdigit(int c) 参数属于0~9,则返回非0值,不属于返回0
int main()
{int ret1 = isdigit('0');int ret2 = isdigit('z');printf("%d %d\n", ret1, ret2);return 0;
}
结果为:
4.字符分类函数小结
我在上面给大家介绍了三个字符分类函数的用法,其他的函数用法与之相似,大家可自行验证。下来,我利用islower函数来实现将小写字母转换为大写字母的代码。
#include <stdio.h>
#include <ctype.h>
#include <string.h>int main()
{char arr[] = "i love china";size_t len = strlen(arr);int i = 0;for (i = 0; i < len; i++){if (islower(arr[i]))//如果是小写字母则返回非0,并转化为大写字母{arr[i] -= 32;}}printf("%s", arr);return 0;
}
isupper与islower函数功能相似,前者识别大写字母,后者识别小写字母。使用前者可以实现将大写字母转换为小写字母。
#include <stdio.h>
#include <ctype.h>
#include <string.h>int main()
{char arr[] = "I LOVE CHINA FOREVER";size_t len = strlen(arr);int i = 0;for (i = 0; i < len; i++){if (isupper(arr[i]))//如果是大写字母则返回非0,并转化为小写字母{arr[i] += 32;}}printf("%s", arr);return 0;
}
除此之外,我们可以将这两者联系起来,实现大小写的互相转化。
二.字符转换函数
1.tolower函数
从函数名来分析,我们就可以的值得知,该函数可以将传进去的参数转换为小写字母,如果传进去的本来就是小写字母,则不变。我们上面利用isupper函数实现了将大写字母转化为小写字母,下来我们再利用tolower函数实现将大写字母转化为小写字母。
#include <stdio.h>
#include <ctype.h>
#include <string.h>int main()
{char arr[] = "HELLO WORLD";size_t len = strlen(arr);int i = 0;for (i = 0; i < len; i++){if (isupper(arr[i]))//判断是否为大写字母{arr[i] = tolower(arr[i]);//将大写字母转化为小写字母,相当于完成了+32的操作}}printf("%s\n", arr);return 0;
}
有的人会问:既然tolower可以将大写转化为小写,小写不受影响,那为什么不直接将所有字符都传给该函数?这就涉及到效率的问题,如果每次都调用该函数会导致程序效率降低,所以可以先进行判断,后将判断为真的字符转化为小写字母。
2.toupper函数
该函数与tolower函数异曲同工,该函数是将小写字母转化为大写字母,如果本来就是大写字母则不发生改变。我们现在利用该函数实现将小写字母转化为大写字母。
//toupper函数
//将传进去的参数转化为大写字母,如果本来就是大写字母则不改变
int main()
{char arr[] = "hello world";size_t len = strlen(arr);int i = 0;for (i = 0; i < len; i++){if (islower(arr[i]))//判断是否为大写字母{arr[i] = toupper(arr[i]);//将小写字母转化为大写字母,相当于完成了-32的操作}}printf("%s\n", arr);return 0;
}
总结
我们在日常生活中经常会遇到需要处理字符的问题,有了这些函数就可以方便我们对字符的操作,之前我们判断其是不是小写字母(arr[i]>='a'&&arr[i]<='z'),这样非常麻烦,有了这些函数之后就可以非常方便的判断是不是我们需要的字符。