Basically I have string of whitespace \" \"
or blocks of whitespace or \"\"
empty in some of the lines of the files and I would
std::string mystr = "hello";
if(mystr == " " || mystr == "")
//do something
In breaking a string down, std::stringstream
can be helpful.
If you want pattern checking use regexp.
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;
}
bool isWhitespace(std::string s){
for(int index = 0; index < s.length(); index++){
if(!std::isspace(s[index]))
return false;
}
return true;
}
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.,
std::string str = ...;
if (str.empty() || str == " ") {
// It's empty or a single space.
}