【问题标题】:How to use the isspace function in c++?如何在 C++ 中使用 isspace 函数?
【发布时间】:2012-01-23 01:50:47
【问题描述】:

我正在尝试弄清楚如何使用此功能。我在网上找到了它,显然它会检查你的字符串中是否有空格。所以它不适合我。我发现我什至没有进入我需要的 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?我做错了什么 D:?
  • ¤ 只要您假设对英文字母有限制(如果是的话),我看不出有什么技术上的错误。但是,使用整数作为布尔标志,而不仅仅是使用 C++ bool 变量,例如使用printf 而不是 C++ iostreams(在初学者程序中),似乎表明您有首先学习 C 的负担。如果是这样,那么您需要专注于不学习 C,并学习 C++,这是一个 不同的语言。哦,顺便问一下,您是否使用没有数字的输入测试了代码?那么空间将不会被检测到。干杯&hth.,
  • 你没有做错什么。只是让 Stack Overflow 作为对所有年龄段的人有用的资源的成本是,所有年龄段的人不仅使用 Stack Overflow,而且还坚持使用其“管理”功能,例如投票。所以,你有孩子(或有孩子头脑的人)对他们不理解的任何事情投反对票,或者他们发现在他们看来是消极或不明确的事情,等等。这只是成本。最好的(如果可能的话)就是忽略它。 ;-)
  • @AlfP.Steinbach 感谢您提供所有信息。对投票系统有意义。是的,我首先(通过学校)学习了 C,现在我在 C++,这是一个学期。这是我们的第一个任务(也是其中的一部分),而且非常令人困惑。从技术上讲,我们还没有学到任何“isspace”或“isdigit”的东西,这是我在谷歌上搜索并找到这些东西。在学习 C++ 时,我会听取您的建议并尝试“忘记 c”。 (:

标签: c++ function


【解决方案1】:

仅仅测试一个字符串中是否有空格是非常不必要的。这就是你所需要的:

#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返回导致函数返回@987654335的迭代器@。如果find_if 一直到结束并且函数永远不会返回true,那么它会返回一个迭代器到范围的末尾,在这种情况下是str.end()

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

【讨论】:

  • 现在看。你告诉我的方法很复杂,而你刚刚向我展示的“更容易”对我来说看起来更复杂。我什至不明白发生了什么。首先,“::”是做什么的?其次,我不明白什么是“std::string::npos;”正在做什么,或者他们正在做什么(考虑到我不知道 :: 做什么)。
  • @MichaelGoldshteyn 感谢您发现这一点,这总是让我感到困惑。
  • @Robsta:我认为在继续这个问题之前,您应该坐下来阅读一本好的 C++ 书籍。相信我,你会帮自己一个大忙。
  • @Robsta 那么这应该被标记为作业。阅读更新后的答案以获取代码说明。
  • C issspace() 函数的问题是“参数是一个int,其值应该可以表示为一个unsigned char 或应等于宏 EOF 的值。如果参数具有任何其他值,则行为未定义。如果普通的char 被签名,那么字符串可能包含负值。您需要先将该值转换为unsigned char,然后再将其传递给isspace()。 (一些实现会处理这个问题,但你不应该依赖它。)
【解决方案2】:

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

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

【讨论】:

  • 这不等同。 isspace() 检查它的参数是否是任何空白字符;其中包括空格字符以及'\f''\n''\r''\t''\v'(可能还有其他字符,具体取决于区域设置)。
猜你喜欢
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多