私は文字がCの空白に等しいかどうかを確認しようとしています。タブは'\t'
であり、改行は'\n'
であることを知っていますが、 if
ステートメント内の通常の通常スペース(スペースバーから)。
誰がこれのキャラクターを知っていますか?
スペースの文字表現は、単に' '
です。
void foo (const char *s)
{
unsigned char c;
...
if (c == ' ')
...
}
しかし、本当にすべての空白を探しているのであれば、Cにはそのための関数(実際はしばしばマクロです)があります:
#include <ctype.h>
...
void foo (const char *s)
{
char c;
...
if (isspace(c))
...
}
isspace
について読むことができます ここ
すべての非印刷文字を本当にキャッチしたい場合、使用する関数は同じライブラリのisprint
です。これは、0x20未満(スペースのASCIIコード)および0x7Eを超えるすべての文字(0x7fはDELのコードであり、その上のすべては拡張機能です)を扱います。
生コードでは、これは次と同等です:
if (c < ' ' || c >= 0x7f)
// Deal with non-printing characters.
Space
のASCII値は32です。したがって、charを32の8進数の値である40または20の16進数の値と比較できます。
if(c == '\40') { ... }
または
if(c == '\x20') { ... }
\
の直後の文字がx
でない場合、\
の後の数字は8進数と見なされます。この場合、16進数と見なされます。
特別なエスケープシーケンスは不要です。スペースを直接入力するだけです。
if (char_i_want_to_test == ' ') {
// Do something because it is space
}
ASCIIでは、スペースはコード32であるため、could'\x20'
または32
でスペースを指定しますが、実際にはそうすべきではありません。
余談:「ホワイトスペース」という単語は、スペース、タブ、改行などのすべての意味です。特に通常のスペース文字を参照するときは、この用語を使用しないでください。
isspace関数を使用します。
Cライブラリ関数int isspace(int c)は、渡された文字が空白かどうかをチェックします。
サンプルコード:
int main()
{
char var= ' ';
if( isspace(var) )
{
printf("var1 = |%c| is a white-space character\n", var );
}
/*instead you can easily compare character with ' '
*/
}
標準の空白文字は、- ''(0x20)スペース(SPC) '\ t'(0x09)水平タブ(TAB) '\ n'(0x0a)改行(LF) '\ v'(0x0b)垂直タブ(VT) '\ f'(0x0c)フィード(FF) '\ r'(0x0d)キャリッジリターン(CR)
ソース: tutorialpoint
スペース記号を確認するには、次のアプローチを使用できます
if ( c == ' ' ) { /*...*/ }
スペースやタブ記号(標準の空白文字)を確認するには、次の方法を使用できます
#include <ctype.h>
//...
if ( isblank( c ) ) { /*...*/ }
空白を確認するには、次のアプローチを使用できます
#include <ctype.h>
//...
if ( isspace( c ) ) { /*...*/ }
#include <stdio.h>
main()
{
int c,sp,tb,nl;
sp = 0;
tb = 0;
nl = 0;
while((c = getchar()) != EOF)
{
switch( c )
{
case ' ':
++sp;
printf("space:%d\n", sp);
break;
case '\t':
++tb;
printf("tab:%d\n", tb);
break;
case '\n':
++nl;
printf("new line:%d\n", nl);
break;
}
}
}