在使用字符匹配或者从输入端字符判断的时候,经常不能控制客户端输入的情况是否匹配,这个时候就需要判断输入的字符是数字,字符还是控制字符等。
其中cctype文件就为我们提供了几种非常实用的函数。
1. 使用isalnum()判断指定的字符是数还是字符
这里给定一串固定的字符串"05-9*ac zACZ+",从中找出是字符或数字的项目:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zACZ+" };
PrintfCharArray(data);
printf("\n调用函数isalnum():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isalnum(data[i]))
{
printf("\tdata[%d] = %c \n", i, data[i]);
}
}
printf("是数字或字母\n");
return 0;
}
执行结果:
2. 使用isalpha()找出其中的字符
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zACZ+" };
PrintfCharArray(data);
printf("\n调用函数isalpha():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isalpha(data[i]))
{
printf("\tdata[%d] = %c \n", i, data[i]);
}
}
printf("是字符\n");
return 0;
}
执行结果:
3. 使用iscntrl()找出其中的控制字符
在字符串"05-9*ac zACZ+\n\t"中第13位是换行符'\n',第14位是制表符'\t',属于控制字符:
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zACZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数iscntrl():\n");
for (int i = 0; i < strlen(data); i++)
{
if (iscntrl(data[i]))
{
printf("\tdata[%d] = head[%c]tail\n", i, data[i]);
}
}
printf("是字符\n");
return 0;
}
执行结果:
4. 使用isdigit()找出字符中的数字
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zACZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数isdigit():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isdigit(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是数字\n");
return 0;
}
执行结果:
5. 使用isgraph()找出除空格之外的打印字符:
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zACZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数isgraph():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isgraph(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是除空格之外的打印字符\n");
return 0;
}
执行结果:
6. 使用islower)找出小写字符:
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zACZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数islower():\n");
for (int i = 0; i < strlen(data); i++)
{
if (islower(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是小写字母\n");
return 0;
}
执行结果:
7. 使用isprint()找出包含空格的打印字符:
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zACZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数isprint():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isprint(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是包括空格的打印字符\n");
return 0;
}
执行结果:
8. 使用ispunct()找出所有的标点符号:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zA.CZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数ispunct():\n");
for (int i = 0; i < strlen(data); i++)
{
if (ispunct(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是标点符号\n");
return 0;
}
执行结果:
9. 使用ispunct()找出所有标准空白字符,如空格、进制、换行符、回车、水平制表符或者垂直制表符:
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zA.CZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数isspace():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isspace(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是标准空白字符\n");
return 0;
}
执行结果:
10. 使用isupper()找出所有的大写字符:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zA.CZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数isupper():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isupper(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是大写字符\n");
return 0;
}
执行结果:
11. 使用isxdigit()找出所有十六进制数字(0~F):
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "05-9*ac zA.CZ+\n\t" };
PrintfCharArray(data);
printf("\n调用函数isxdigit():\n");
for (int i = 0; i < strlen(data); i++)
{
if (isxdigit(data[i]))
{
printf("\tdata[%d] = %c\n", i, data[i]);
}
}
printf("是十六进制数字\n");
return 0;
}
执行结果:
12. 使用tolower()让大写字符转换成小写,非字母的保持不变:
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "0aczACZ+" };
PrintfCharArray(data);
printf("\n调用函数tolower()之后:\n");
for (int i = 0; i < strlen(data); i++)
{
data[i] = tolower(data[i]);
printf("\tdata[%d] = %c\n", i, data[i]);
}
printf("将小写字符转换成大写\n");
return 0;
}
执行结果:
13. 使用tolower()让小写字符转换成大写,非字母的保持不变:
源码:
// Len_cctype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cctype>
#include <iostream>
void PrintfCharArray(char* data)
{
printf("len = %d\n", strlen(data));
for (int i = 0; i < strlen(data); i++)
{
printf("\t data[%d]: %c\n", i, data[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char data[] = { "0aczACZ+" };
PrintfCharArray(data);
printf("\n调用函数toupper()之后:\n");
for (int i = 0; i < strlen(data); i++)
{
data[i] = toupper(data[i]);
printf("\tdata[%d] = %c\n", i, data[i]);
}
return 0;
}
执行结果: