C中的空格符号是什么?

Ces*_*r A 33 c whitespace space

我试图找出如何检查一个字符是否等于C中的空格.我知道标签是'\t'和换行符'\n',但我希望能够检查一个常规的正常空间(来自空格键)在一份if声明中.

有谁知道这是什么角色?

hac*_*cks 46

空白没有特定的符号.它实际上是一组通常的一些字符:

' '      space 
'\t'     horizontal tab 
'\n'     newline
'\v'     vertical tab 
'\f'     feed 
'\r'     carriage return    
Run Code Online (Sandbox Code Playgroud)

如果要检查这些空格中的任何一个,请使用isspace标准库函数ctype.h.

对于一个空间,请使用' '.

  • @Hurkyl问题的标题是*空白*.也许现在是时候教OP了解空格字符和被认为是空格的字符集之间的区别. (4认同)
  • `isspace`将返回肯定的''\ t'`,这是OP不想要的. (3认同)

kdo*_*pen 8

空间的字符表示很简单' '.

void foo (const char *s)
{
    unsigned char c;
    ...
    if (c == ' ')
        ...
}
Run Code Online (Sandbox Code Playgroud)

但是如果你真的在寻找所有的空白,那么C有一个函数(实际上它通常是一个宏):

#include <ctype.h>
...

void foo (const char *s)
{
    char c;
    ...
    if (isspace(c))
        ...
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读isspace

如果您确实要捕获所有非打印字符,则要使用的函数isprint来自同一个库.这将处理0x20以下的所有字符(空格的ASCII代码)和0x7E以上的字符(0x7f是DEL的代码,以及上面的所有内容都是扩展名).

在原始代码中,这相当于:

if (c < ' ' || c >= 0x7f)
    // Deal with non-printing characters.
Run Code Online (Sandbox Code Playgroud)

  • 迂腐:`char c; ... if (isspace(c))` 是 UB 当 `c &lt; 0` 时。可以使用`if (isspace((unsigned char) c))` (2认同)

小智 5

ASCII值为Space32.因此,您可以将char与八进制值32进行比较,该值为40或其十六进制值为20.

if(c == '\40') { ... }

要么

if(c == '\x20') { ... }

如果后面的\字符\不是x,则假定为八进制之后的任何数字,在这种情况下,它被认为是十六进制.

  • `'\40'`、`'\x20'`、`32`、`' '` 在基于 ASCII 的 C 实现中完全相同。相同的类型(`int`)。相同的值。相同的内部表示。相同的(如果有的话)填充。相同的(如果有的话)陷阱表示。在所有 4 个中,只有最后一个可以保证在每台具有 C 实现的计算机上表示空格,无论它是基于 ASCII、基于 EBCDIC 还是基于 KLINGON。 (2认同)