开发者

C++ check if string is space or null

开发者 https://www.devze.com 2023-03-12 04:10 出处:网络
Basically I have string of whitespace \"\" or blocks of whitespace or \"\" empty in some of the lines of the files and I would like to know if there is a function in 开发者_C百科C++ that checks this.

Basically I have string of whitespace " " or blocks of whitespace or "" empty in some of the lines of the files and I would like to know if there is a function in 开发者_C百科C++ that checks this.

*note:* As a side question, in C++ if I want to break a string down and check it for a pattern which library should I use? If I want to code it myself which basic functions should I know to manipulate string? Are there any good references?


bool isWhitespace(std::string s){
    for(int index = 0; index < s.length(); index++){
        if(!std::isspace(s[index]))
            return false;
    }
    return true;
}


std::string str = ...;
if (str.empty() || str == " ") {
    // It's empty or a single space.
}


 std::string mystr = "hello";

 if(mystr == " " || mystr == "")
   //do something

In breaking a string down, std::stringstream can be helpful.


You don't have a nullstring "in some of the lines of the files".

But you can have an empty string, i.e. an empty line.

You can use e.g. std::string.length, or if you like C better, strlen function.

In order to check for whitespace, the isspace function is handy, but note that for char characters the argument should be casted to unsigned char, e.g., off the cuff,

bool isSpace( char c )
{
    typedef unsigned char UChar;
    return bool( ::isspace( UChar( c ) ) );
}

Cheers & hth.,


Since you haven't specified an interpretation of characters > 0x7f, I'm assuming ASCII (i.e. no high characters in the string).

#include <string>
#include <cctype>

// Returns false if the string contains any non-whitespace characters
// Returns false if the string contains any non-ASCII characters
bool is_only_ascii_whitespace( const std::string& str )
{
    auto it = str.begin();
    do {
        if (it == str.end()) return true;
    } while (*it >= 0 && *it <= 0x7f && std::isspace(*(it++)));
             // one of these conditions will be optimized away by the compiler,
             // which one depends on whether char is signed or not
    return false;
}


If you want pattern checking use regexp.

0

精彩评论

暂无评论...
验证码 换一张
取 消