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

Rob*_*isk 4 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!!");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

谁知道我做错了什么?如果您需要我澄清任何事情,请告诉我.

Set*_*gie 12

所有这些都是非常不必要的,只测试一个字符串是否有空格.这就是你所需要的:

#include <ctype.h>

bool hasspace = std::find_if(str.begin(), str.end(), ::isspace) != str.end();
Run Code Online (Sandbox Code Playgroud)

::是范围分辨率运算符,指定它isspace是一个全局函数,而不是类似命名的std::isspace,并且find_if是一个内部函数std::.如果你使用using namespace std;那么你不需要,std::但你仍然需要平原::.

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

这意味着如果find_if返回str.end(),它将返回到字符串的末尾而不isspace返回true,这意味着字符串中没有空格字符.因此,你可以测试find_if反对的结果str.end(); 如果它们是unequal(!=),那意味着字符串中有一个空格,并且hasspacetrue.不,hasspacefalse.

  • @Robsta:我认为在恢复这个问题之前,你是一个很好的时间用一本好的C++书籍.相信我,你会给自己一个巨大的帮助. (3认同)
  • C`issspace()`函数的问题是"参数是一个**int**,其值可以表示为**unsigned char**或者等于宏的值**EOF**.如果参数有任何其他值,则行为未定义." 如果普通`char`被签名,则字符串可以包含负值.在将值传递给`isspace()`之前,需要将值转换为`unsigned char`.(有些实现会处理这个,但你不应该依赖它.) (3认同)
  • @Robsta然后这应该被标记为功课.阅读更新的答案以获取代码说明. (2认同)