如何在c ++中使用isspace函数?

时间:2012-01-23 01:50:47

标签: c++ function

我正在试图弄清楚如何使用这个功能。我在网上找到它,显然它检查你的字符串中是否有空格。所以这对我不起作用。我已经发现我甚至没有进入我需要的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 个答案:

答案 0 :(得分:12)

如果一个字符串中有空格,那么只需要测试一下就没有必要了。这就是你所需要的:

#include <ctype.h>

bool hasspace = std::find_if(str.begin(), str.end(), ::isspace) != str.end();

::是范围解析运算符,指定isspace是全局函数,而不是名称相似的std::isspace,而find_ifstd::内的函数}。如果您使用using namespace std;,则不需要std::,但仍需要普通::

find_if函数将迭代器作为字符串的开头,字符串结尾的迭代器,以及接受参数并返回一些可转换为bool的值的函数。 find_if从第一个迭代器迭代到第二个迭代器,将当前项的每个值传递给你给它的函数,如果函数返回truefind_if返回导致的迭代器返回true的函数。如果find_if一直到最后并且函数永远不会返回true,那么它会返回一个迭代器到范围的末尾,在本例中是str.end()

这意味着,如果find_if返回str.end(),则它到达字符串的末尾而isspace不返回true,这意味着字符串中没有空格字符。因此,您可以针对find_if测试str.end()的结果;如果它们不相等(!=),则表示字符串中有空格,hasspacetrue。否则,hasspacefalse

答案 1 :(得分:0)

  

这是另一种方式,如果上述版本看起来很奇怪,或者它超出了你的知识

if(marks[i] == ' ') {
cout<<"Space found!";
}