2015-05-04 13 views
23

Ich versuche herauszufinden, wie zu prüfen, ob ein Zeichen gleich dem Leerzeichen in C ist. Ich weiß, dass Registerkarten '\t' sind und Zeilenumbrüche sind '\n', aber ich möchte in der Lage sein, nur für eine normale Normalraum (von die Leertaste) innerhalb einer if Anweisung.Was ist das Symbol für Leerzeichen in C?

Weiß jemand, was ist der Charakter dafür?

+8

'char a = '';' Leerzeichen ist das Zeichen – Gopi

+2

Dies ist etwas, das Sie leicht googeln könnten? Wie in vielen Sprachen, ein char: ' – Beko

+0

Lesenswert [this] – Tensibai

Antwort

30

Es gibt kein bestimmtes Symbol für Leerzeichen. Es ist eigentlich eine Reihe von einigen Zeichen, die üblicherweise sind:

' '  space 
'\t'  horizontal tab 
'\n'  newline 
'\v'  vertical tab 
'\f'  feed 
'\r'  carriage return  

Verwenden isspace Standardbibliotheksfunktion von ctype.h, wenn Sie für einen dieser weißen Räume überprüfen möchten.

Verwenden Sie für einen Platz nur ' '.

+2

'isspace' würde für '' \ t''bejahend zurückkehren, was das OP nicht wünscht. – Hurkyl

+1

Angenommen, er möchte nach allen Leerzeichen suchen, nicht nur nach Leerzeichen. –

+2

@Hurky Der Titel der Frage lautet * whitespace *. Vielleicht ist es an der Zeit, die OP über den Unterschied zwischen dem Leerzeichen und den Zeichen, die als Leerzeichen betrachtet werden, aufzuklären. –

6

Die Zeichendarstellung eines Space ist einfach ' '.

void foo (const char *s) 
{ 
    unsigned char c; 
    ... 
    if (c == ' ') 
     ... 
} 

Aber wenn Sie wirklich für alle Leerzeichen suchen, dann hat C eine Funktion (eigentlich ist es oft ein Makro) dafür:

#include <ctype.h> 
... 

void foo (const char *s) 
{ 
    char c; 
    ... 
    if (isspace(c)) 
     ... 
} 

können Sie lesen über isspacehere

Wenn Sie möchten wirklich alle nicht druckbaren Zeichen abfangen, die zu verwendende Funktion ist isprint aus derselben Bibliothek. Dies betrifft alle Zeichen unter 0x20 (der ASCII-Code für ein Leerzeichen) und über 0x7E (0x7f ist der Code für DEL und alles darüber ist eine Erweiterung).

In Rohcode ist dies äquivalent zu:

if (c < ' ' || c >= 0x7f) 
    // Deal with non-printing characters. 
+0

Ihrem 'foo()' fehlt die Typinformation für 's'. – unwind

+0

K & R :) .. Ich werde es beheben danke – kdopen

+0

Pedantic: 'char c; ... if (isspace (c)) 'ist UB wenn' c <0'. Könnte 'if (issspace ((unsigned char) c))' verwenden – chux

3

keine spezielle Escape-Sequenz erforderlich ist: Sie können nur den Raum direkt eingeben:

if (char_i_want_to_test == ' ') { 
    // Do something because it is space 
} 

In ASCII, Raum ist Code 32, so Sie könnte Speicherplatz von '\x20' oder sogar 32 angeben, aber Sie sollten das wirklich nicht tun.

Beiseite: das Wort "Whitespace" ist ein Fang alle für Raum, Tab, Newline und all das. Wenn Sie sich speziell auf das normale Leerzeichen beziehen, sollten Sie den Begriff nicht verwenden.

1

Nutzen Sie die Isspace-Funktion.

Die C-Bibliotheksfunktion int isspace (int c) prüft, ob das übergebene Zeichen Leerzeichen ist.

Beispielcode:

int main() 
    { 

     char var= ' '; 

     if(isspace(var)) 
     { 
      printf("var1 = |%c| is a white-space character\n", var); 
     } 
/*instead you can easily compare character with ' ' 
    */  
    } 
 
Standard white-space characters are − 

' ' (0x20) space (SPC) 
'\t' (0x09) horizontal tab (TAB) 
'\n' (0x0a) newline (LF) 
'\v' (0x0b) vertical tab (VT) 
'\f' (0x0c) feed (FF) 
'\r' (0x0d) carriage return (CR) 

Quelle: tutorialpoint

1

Um ein Leerzeichen Symbol überprüfen Sie die folgende Vorgehensweise verwenden können

if (c == ' ') { /*...*/ } 

einen Raum zu überprüfen und/oder ein Tabulator-Symbol (Standard Leerzeichen)) Können Sie den folgenden Ansatz

#include <ctype.h> 

//... 

if (isblank(c)) { /*...*/ } 

Um einen weißen Raum zu überprüfen verwenden, können Sie den folgenden Ansatz verwenden

#include <ctype.h> 

//... 

if (isspace(c)) { /*...*/ } 
3

Der ASCII-Wert von Space ist 32. So können Sie Ihr Zeichen zum Oktalwert vergleichen von 32, die 40 oder dessen hexadezimale Wert, der 20.

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

oder

ist

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

Jede Zahl nach den \ wird angenommen, Oktal zu sein, wenn der Charakter gerade nach \ nicht x ist, in welchem ​​Fall es gilt als hexadezimal sein.