2015-05-04 14 views
23

Tôi đang cố gắng tìm hiểu cách kiểm tra xem ký tự có bằng không gian trắng trong C. Tôi biết rằng các tab là '\t' và dòng mới là '\n', nhưng tôi muốn chỉ có thể kiểm tra không gian bình thường (từ không gian-bar) bên trong câu lệnh if.Biểu tượng cho khoảng trắng trong C là gì?

Có ai biết nhân vật này là gì không?

+8

'char a = '';' không gian là ký tự – Gopi

+2

Đây là điều bạn có thể dễ dàng googled? Như trong nhiều ngôn ngữ, một char: '''' – Beko

+0

Giá trị đọc [this] (http://en.wikipedia.org/wiki/Escape_sequences_in_C) – Tensibai

Trả lời

30

Không có ký hiệu cụ thể cho khoảng trắng. Nó thực sự là một tập hợp của một số nhân vật mà là phong tục:

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

Sử dụng isspace chức năng thư viện chuẩn từ ctype.h nếu bạn muốn kiểm tra cho bất kỳ những khoảng trắng.

Chỉ với một không gian, sử dụng ' '.

+2

'isspace' sẽ trả về xác nhận cho' '\ t'', mà OP không muốn. – Hurkyl

+1

Giả sử anh ta muốn kiểm tra tất cả các ký tự khoảng trống, và không chỉ là không gian. –

+2

@Hurkyl Tiêu đề của câu hỏi cho biết * khoảng trắng *. Có lẽ đó là thời gian để giáo dục OP về sự khác biệt giữa nhân vật không gian và tập hợp các ký tự được coi là khoảng trắng. –

6

Biểu diễn ký tự của Dấu cách đơn giản là ' '.

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

Nhưng nếu bạn đang thực sự tìm kiếm tất cả khoảng trắng, sau đó C có chức năng (trên thực tế nó thường là một macro) cho rằng:

#include <ctype.h> 
... 

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

Bạn có thể đọc về isspacehere

Nếu bạn thực sự muốn bắt tất cả các ký tự không in, chức năng sử dụng là isprint từ cùng một thư viện. Điều này đề cập đến tất cả các ký tự bên dưới 0x20 (mã ASCII cho khoảng trống) và trên 0x7E (0x7f là mã cho DEL và mọi thứ ở trên là phần mở rộng).

Trong mã thô này tương đương với:

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

'foo()' của bạn thiếu thông tin loại cho 's'. – unwind

+0

K & R :) .. Tôi sẽ sửa chữa nó nhờ – kdopen

+0

Pedantic: 'char c; ... if (isspace (c)) 'là UB khi' c <0'. Có thể sử dụng 'if (isspace ((unsigned char) c))' – chux

3

Không escape sequence được yêu cầu: bạn chỉ có thể gõ không gian trực tiếp:

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

Trong ASCII, không gian là mã 32, vì vậy bạn có thể chỉ định khoảng cách '\x20' hoặc thậm chí 32, nhưng bạn thực sự không nên làm điều đó.

Bên cạnh: từ "khoảng trắng" là nội dung hấp dẫn cho không gian, tab, dòng mới và tất cả điều đó. Khi bạn đề cập cụ thể đến ký tự không gian thông thường, bạn không nên sử dụng thuật ngữ này.

1

sử dụng chức năng isspace.

Không gian chức năng int của thư viện C (int c) kiểm tra xem ký tự được chuyển là là khoảng trắng hay không.

mẫu mã:

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) 

nguồn: tutorialpoint

1

Để kiểm tra một biểu tượng không gian bạn có thể sử dụng các phương pháp sau đây

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

Để kiểm tra một không gian và/hoặc biểu tượng tab (ký tự trống chuẩn), Bạn có thể sử dụng các phương pháp sau đây

#include <ctype.h> 

//... 

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

Để kiểm tra một khoảng trắng, bạn có thể sử dụng các phương pháp sau đây

#include <ctype.h> 

//... 

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

Giá trị ASCII của Space là 32. Vì vậy, bạn có thể so sánh char của bạn với giá trị bát phân 32 mà là 40 hoặc giá trị thập lục phân của nó là 20.

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

hoặc

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

Bất kỳ số sau \ được giả định là bát phân, nếu nhân vật ngay sau \ không phải là x, trong trường hợp đó nó được coi là một thập lục phân.

Các vấn đề liên quan