Как использовать функцию isspace в C ++? - PullRequest
4 голосов
/ 23 января 2012

Я пытаюсь выяснить, как использовать эту функцию.Я нашел его в Интернете и, по-видимому, он проверяет, есть ли в вашей строке пробел.Так что это не работает для меня.Я понял, что я даже не вхожу в заявление if, которое мне нужно.

for (i=0;i < marks.length();i++)
{
    if (isdigit(marks[i]))
    {
        floatMARK = 1;
    }
    else 
    {
        charMARK = 1;
    }
}

if (floatMARK == 1)
{
    printf("were in.");
    for (i=0;i < marks.length();i++)
    {
        if (isspace(marks[i]))
        {
            multiMARK = 1;
            printf("WE HAVE A SPACE!!");
        }
    }

}

Кто-нибудь знает, что я делаю не так?Если вам нужно, чтобы я что-то разъяснил, дайте мне знать.

Ответы [ 2 ]

12 голосов
/ 23 января 2012

Все, что очень не нужно, просто проверить, есть ли в строке пробел.Это все, что вам нужно:

#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.

0 голосов
/ 23 января 2012

вот другой способ, если вышеприведенная версия кажется странной или она выше вашего знания

if(marks[i] == ' ') {
cout<<"Space found!";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...