Все, что очень не нужно, просто проверить, есть ли в строке пробел.Это все, что вам нужно:
#include <ctype.h>
bool hasspace = std::find_if(str.begin(), str.end(), ::isspace) != str.end();
::
- это оператор разрешения области, определяющий, что isspace
является глобальной функцией, а не с таким же именем std::isspace
, а find_if
является функцией внутриstd::
.Если вы используете using namespace std;
, тогда вам не нужен std::
, но вам все равно нужен простой ::
.
Функция find_if
переносит итератор в начало строки, итератор дляконец строки и функция, которая принимает аргумент и возвращает некоторое значение, конвертируемое в bool
.find_if
выполняет итерацию от первого итератора ко второму итератору, передавая каждое значение текущего элемента функции, которую вы ему дали, и если функция возвращает true
, find_if
возвращает итератор, из-за которого функция вернула true
.Если find_if
доходит до конца и функция никогда не возвращает true
, то она возвращает итератор до конца диапазона, который в данном случае равен str.end()
.
Это означает, что если find_if
возвращает str.end()
, доходит до конца строки без isspace
, возвращая true
, что означает, что в строке не было пробелов.Таким образом, вы можете проверить результат find_if
против str.end()
;Если они неравны (!=
), это означает, что в строке был пробел, а hasspace
равно true
.Иначе, hasspace
- это false
.