C ++ проверяет, является ли строка пробелом или нулем - PullRequest
4 голосов
/ 13 июня 2011

В основном у меня есть строка пробела " " или блоки пробела или "" пустые в некоторых строках файлов, и я хотел бы знать, есть ли в C ++ функция, которая проверяет это.

* note : * В качестве дополнительного вопроса в C ++, если я хочу разбить строку и проверить ее на наличие шаблона, какую библиотеку следует использовать? Если я хочу сам написать код, какие основные функции я должен знать, чтобы манипулировать строкой? Есть ли хорошие отзывы?

Ответы [ 6 ]

5 голосов
/ 13 июня 2011
std::string str = ...;
if (str.empty() || str == " ") {
    // It's empty or a single space.
}
3 голосов
/ 14 марта 2014
bool isWhitespace(std::string s){
    for(int index = 0; index < s.length(); index++){
        if(!std::isspace(s[index]))
            return false;
    }
    return true;
}
2 голосов
/ 13 июня 2011

У вас нет нулевой строки «в некоторых строках файлов».

Но вы можете иметь пустую строку, то есть пустую строку.

Вы можете использовать, например,std::string.length или, если вам больше нравится C, функция strlen.

Для проверки пробелов функция isspace удобна, но учтите, что для символов char аргумент должен быть приведендо unsigned char, например, с манжеты,

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

Приветствия & hth.,

2 голосов
/ 13 июня 2011
 std::string mystr = "hello";

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

При разрыве строки может помочь std::stringstream.

0 голосов
/ 13 июня 2011

Поскольку вы не указали интерпретацию символов> 0x7f, я предполагаю, что ASCII (т.е. нет старших символов в строке).

#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;
}
0 голосов
/ 13 июня 2011

Если вы хотите проверить шаблон, используйте регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...