【问题标题】:Check if line is empty or contains non pritable characters检查行是否为空或包含不可打印的字符
【发布时间】:2015-12-11 13:40:47
【问题描述】:

如何检查从文件中扫描的行是否为空或包含不可打印字符?我尝试在 getline 的结果上使用 strlen(),当有空行但不可打印的字符破坏了此代码时,它等于 1。我怎样才能做得更好?

【问题讨论】:

  • 你的意思是不可打印的字符会破坏 strlen() 吗?或者您不知道如何处理不可打印的文件?
  • !*line 和 isprint 应该可以解决问题。

标签: c character-encoding char special-characters


【解决方案1】:

如果if是C代码那么你可以自己写对应的函数

int isValid( const char *s )
{
    while ( *s && !isgraph( ( unsigned char )*s ) ) ++s;

    return *s != '\0';
}

如果它是 C++ 代码并且您使用的是字符数组,那么您可以使用以下方法

#include <algorithm>
#include <iterator>
#include <cctype>
#include <cstring>

//...

if ( std::all_of( s, s + std::strlen( s ), []( char c ) { return !std::isgraph( c ); } ) )
{
   std::cout << "Invalid string" << std::endl;
}

对于std::string 类型的对象,检查看起来相似

if ( std::all_of( s.begin(), s.end(), []( char c ) { return !std::isgraph( c ); } ) )
{
   std::cout << "Invalid string" << std::endl;
}

【讨论】:

  • 这不是倒退吗?如果所有字符都无效,这不是只打印“无效字符串”吗?如果任何字符不可打印,您肯定想获得无效字符串...
  • @jezza 从问题中可以看出,您需要检查字符串中的所有字符是否都不可打印
  • 问题说'......是空的或包含不可打印的字符。'对我来说,这意味着如果字符串包含任何不可打印的字符,则该字符串无效。
  • @jezza 我敢肯定,如果你写的是这样,那么问题的作者给我写了一条评论而不是你。
猜你喜欢
  • 2021-09-26
  • 2019-06-06
  • 2011-03-08
  • 1970-01-01
  • 2017-01-10
  • 2011-01-25
  • 2013-10-26
  • 2011-01-25
  • 2015-06-05
相关资源
最近更新 更多