C++ isprint()
isprint()是C++中的预定义函数,用于处理字符串和字符。所需的字符串和字符函数的头文件分别是cstring和cctype。如果参数包含任何可打印字符,则使用该函数来确定该事实。在C++中,有许多种可打印字符,包括:
digits ( 0123456789 )
uppercase letters ( ABCDEFGHIJKLMNOPQRSTUVWXYZ )
lowercase letters ( abcdefghijklmnopqrstuvwxyz )
punctuation characters ( !"#$%&'()*+,-./:;?@[\]^_`{ | }~ )
space ( )
内置的C++函数”isprint()”位于”cctype.h”头文件中,用于判断一个字符是否可打印。
除了空格字符(‘ ‘)之外,Isprint对于常见字符都返回true。
这个函数(Isprint)还有一个本地化的模型版本,可以在cctype头文件中找到。
要确定一个字符串中是否存在非打印字符,可以使用Isprint()函数。
-Isprint()是一个内部函数,提供了处理无法打印字符的有效方法。
通过使用-Isprint(),程序员可以减少代码行数。
确实,-Isprint()能加快软件编译速度。
将cctype.h包含在您的软件中,以便为用户启用多个附加的相关函数,除了isprint()之外。cctype.h中还有其他函数,包括
isblank(检查字符是否为空格)(检查字符是否为空格)
Iscntrl(检查字符是否为控制字符)(检查字符是否为控制字符)
isdigit(检查字符是否为十进制数字)(检查字符是否为十进制数字)
Isgraph(检查字符是否有图形表示)(检查字符是否有图形表示)
语法
int isprint( int c );
c : character to be checked.
Returns a non-zero value(true) if c is a printable
character else, zero (false).
时间复杂度:O(n)
辅助空间:O(1)
给定一个C++字符串,我们需要计算字符串中可打印字符的数量。算法:
1)逐个遍历给定的字符串的每个字符,检查字符是否是可打印字符。
2)如果是可打印字符,则将计数器递增1,否则遍历到下一个字符。
3)打印计数器的值。
示例
Input : string = 'My name \n is \n Ayush'
Output : 18
Input :string = 'I live in \n Dehradun'
Output : 19
// CPP program to count printable characters in a string
#include
#include
#include
using namespace std;
// function to calculate printable characters
void space(string& str)
{
int count = 0;
int length = str.length();
for (int i = 0; i< length; i++) {
int c = str[i];
if (isprint(c))
count++;
}
cout << count;
}
// Driver Code
int main()
{
string str = "My name \n is \n Ayush";
space(str);
return 0;
}
输出:
18
Isprint()的参数为:
C是要检查的字符,作为int型或EOF进行转换。
示例
Input-: first line /n second line /n
Output-: first line
Input-: line one /n line two/n line three /n
Output-: line one
由于换行字符无法打印,它只会打印一行。
示例
/* isprint example */
#include
#include
int main () {
int i=0;
char str[]="first line n second line n";
while (isprint(str[i])) {
putchar (str[i]);
i++;
}
return 0;
}
输出结果
如果我们运行上面的代码,它将生成以下输出 –
第一行 n 第二行 n
示例
#include
#include
#include
using namespace std;
int main() {
char str[] = "Hellotallnhow are you";
for (int i=0; i
输出
如果我们运行上述代码,将生成以下输出 –
Hellotallnhow are you
注释 就像<cctype>
中的其他所有函数一样,如果参数的值既不能表示为无符号字符,也不等于EOF,std::isprint的行为是未定义的。为了安全地使用这些函数与普通字符(或有符号字符),参数应首先转换为无符号字符:
bool my_isprint(char ch)
{
return std::isprint(static_cast(ch));
}
同样,当迭代器的值类型为char或signed char时,它们不应直接与标准算法一起使用。而应先将值转换为unsigned char:
int count_prints(const std::string& s)
{
return std::count_if(s.begin(), s.end(),
// static_cast(std::isprint) // wrong
// [](int c){ return std::isprint(c); } // wrong
// [](char c){ return std::isprint(c); } // wrong
[](unsigned char c){ return std::isprint(c); } // correct
);
}