2014-01-16 5 views
0

Я знаю, что это очень просто проверить вручную, но есть ли в C++ рекомендуемый способ для проверки того, является ли std :: string пустой или содержит только пробельные символы?Что такое эквивалент .NET String.IsNullOrWhiteSpace в C++?

Если в стандартной библиотеке нет этого, есть ли какая-либо другая библиотека?

+3

По строкам вы имеете в виду 'char *', 'std :: string' или' std :: string * '? –

+0

Я имел в виду std :: string. Я отредактировал вопрос, чтобы отразить это. – AdrianT

ответ

3

Самый простой ответ:

bool 
isNullOrWhiteSpace(std::string const& str) 
{ 
    return std::find_if(
      str.begin(), 
      str.end(), 
      [](unsigned char ch) { return !isspace(ch); }) 
     == str.end(); 
} 

Но это, вероятно, не очень полезно; это зависит от глобальной локали и не будет обрабатывать некоторые из наиболее часто используемых кодировок (например, UTF-8).

+0

Можно использовать 'std :: isspace', который принимает аргумент locale, чтобы он не зависел от глобальной локали, но кодирование действительно является вопрос. –

+0

@CoryNelson Это не так сложно, но это вводит дополнительные проблемы, которые отвлекают от непосредственного ответа на вопрос. Если вы выполняете какую-либо обработку текста вообще, по крайней мере, на C++ 03 (без лямбда), вы создадите соответствующие типы функциональных объектов и поместите их в свой набор инструментов. В этом случае даже с lambda вы можете сделать это, используя 'IsSpace()' (или 'IsSpace (желательноLocale)' вместо lambda. –

+0

Этот код не компилируется с VS 2011: 'error C2678: binary '= = ': не найден оператор, который принимает левый операнд типа' const char '(или нет приемлемого преобразования) \t c: \ program files (x86) \ microsoft visual studio 11.0 \ vc \ include \ xutility \t 3186' – AdrianT

0

Я не верю, что есть стандарт один, но это довольно легко писать

bool isNullOrWhiteSpace(const char* c) { 
    if (!c) { 
    return true; 
    } 
    while (*c) { 
    if (!isspace(static_cast<unsigned char>(*c))) { 
     return false; 
    } 
    c++; 
    } 
    return true; 
} 
+0

Это NullOrEmpty, а не NullOrWhiteSpace? – tabstop

+0

@tabstop должен закончить кофе перед ответом, исправлено – JaredPar

+0

Неопределенное поведение. –

Смежные вопросы