Arduino - Chức năng ký tự
Tất cả dữ liệu được nhập vào máy tính dưới dạng ký tự, bao gồm các chữ cái, chữ số và các ký hiệu đặc biệt khác nhau. Trong phần này, chúng ta thảo luận về các khả năng của C ++ để kiểm tra và thao tác các ký tự riêng lẻ.
Thư viện xử lý ký tự bao gồm một số chức năng thực hiện các kiểm tra và thao tác hữu ích đối với dữ liệu ký tự. Mỗi hàm nhận một ký tự, được biểu diễn dưới dạng int hoặc EOF dưới dạng đối số. Các ký tự thường được thao tác dưới dạng số nguyên.
Hãy nhớ rằng EOF thường có giá trị –1 và một số kiến trúc phần cứng không cho phép các giá trị âm được lưu trữ trong các biến char. Do đó, các hàm xử lý ký tự thao tác các ký tự dưới dạng số nguyên.
Bảng sau đây tóm tắt các chức năng của thư viện xử lý ký tự. Khi sử dụng các hàm từ thư viện xử lý ký tự, hãy bao gồm<cctype> đầu trang.
Không. | Nguyên mẫu & Mô tả |
---|---|
1 | int isdigit( int c ) Trả về 1 nếu c là một chữ số và 0 nếu ngược lại. |
2 | int isalpha( int c ) Trả về 1 nếu c là một chữ cái và 0 nếu ngược lại. |
3 | int isalnum( int c ) Trả về 1 nếu c là một chữ số hoặc một chữ cái và 0 nếu ngược lại. |
4 | int isxdigit( int c ) Trả về 1 nếu c là ký tự chữ số thập lục phân và 0 nếu ngược lại. (Xem Phụ lục D, Hệ thống số, để biết giải thích chi tiết về các số nhị phân, bát phân, thập phân và thập lục phân.) |
5 | int islower( int c ) Trả về 1 nếu c là chữ thường và 0 nếu ngược lại. |
6 | int isupper( int c ) Trả về 1 nếu c là một chữ cái viết hoa; 0 nếu không. |
7 | int isspace( int c ) Trả về 1 nếu c là ký tự khoảng trắng — dòng mới ('\ n'), dấu cách (''), nguồn cấp dữ liệu biểu mẫu ('\ f'), dấu xuống dòng ('\ r'), tab ngang ('\ t') hoặc tab dọc ('\ v') - và 0 nếu không. |
số 8 | int iscntrl( int c ) Trả về 1 nếu c là ký tự điều khiển, chẳng hạn như dòng mới ('\ n'), nguồn cấp dữ liệu biểu mẫu ('\ f'), dấu xuống dòng ('\ r'), tab ngang ('\ t'), tab dọc (' \ v '), alert (' \ a ') hoặc backspace (' \ b ') - và 0 nếu không. |
9 | int ispunct( int c ) Trả về 1 nếu c là ký tự in khác với khoảng trắng, chữ số hoặc chữ cái và 0 nếu ngược lại. |
10 | int isprint( int c ) Trả về 1 nếu c là một ký tự in bao gồm khoảng trắng ('') và 0 nếu không. |
11 | int isgraph( int c ) Trả về 1 nếu c là ký tự in khác với khoảng trắng ('') và 0 nếu không. |
Ví dụ
Ví dụ sau minh họa việc sử dụng các hàm isdigit, isalpha, isalnum và isxdigit. Chức năngisdigitxác định xem đối số của nó có phải là một chữ số (0-9) hay không. Chức năngisalphaxác định xem đối số của nó là chữ hoa (AZ) hay chữ thường (a – z). Chức năngisalnumxác định xem đối số của nó là chữ hoa, chữ thường hay chữ số. Chức năngisxdigit xác định xem đối số của nó có phải là chữ số thập lục phân hay không (A – F, a – f, 0–9).
ví dụ 1
void setup () {
Serial.begin (9600);
Serial.print ("According to isdigit:\r");
Serial.print (isdigit( '8' ) ? "8 is a": "8 is not a");
Serial.print (" digit\r" );
Serial.print (isdigit( '8' ) ?"# is a": "# is not a") ;
Serial.print (" digit\r");
Serial.print ("\rAccording to isalpha:\r" );
Serial.print (isalpha('A' ) ?"A is a": "A is not a");
Serial.print (" letter\r");
Serial.print (isalpha('A' ) ?"b is a": "b is not a");
Serial.print (" letter\r");
Serial.print (isalpha('A') ?"& is a": "& is not a");
Serial.print (" letter\r");
Serial.print (isalpha( 'A' ) ?"4 is a":"4 is not a");
Serial.print (" letter\r");
Serial.print ("\rAccording to isalnum:\r");
Serial.print (isalnum( 'A' ) ?"A is a" : "A is not a" );
Serial.print (" digit or a letter\r" );
Serial.print (isalnum( '8' ) ?"8 is a" : "8 is not a" ) ;
Serial.print (" digit or a letter\r");
Serial.print (isalnum( '#' ) ?"# is a" : "# is not a" );
Serial.print (" digit or a letter\r");
Serial.print ("\rAccording to isxdigit:\r");
Serial.print (isxdigit( 'F' ) ?"F is a" : "F is not a" );
Serial.print (" hexadecimal digit\r" );
Serial.print (isxdigit( 'J' ) ?"J is a" : "J is not a" ) ;
Serial.print (" hexadecimal digit\r" );
Serial.print (isxdigit( '7' ) ?"7 is a" : "7 is not a" ) ;
Serial.print (" hexadecimal digit\r" );
Serial.print (isxdigit( '$' ) ? "$ is a" : "$ is not a" );
Serial.print (" hexadecimal digit\r" );
Serial.print (isxdigit( 'f' ) ? “f is a" : "f is not a");
}
void loop () {
}
Kết quả
According to isdigit:
8 is a digit
# is not a digit
According to isalpha:
A is a letter
b is a letter
& is not a letter
4 is not a letter
According to isalnum:
A is a digit or a letter
8 is a digit or a letter
# is not a digit or a letter
According to isxdigit:
F is a hexadecimal digit
J is not a hexadecimal digit
7 is a hexadecimal digit
$ is not a hexadecimal digit
f is a hexadecimal digit
Chúng tôi sử dụng toán tử điều kiện (?:)với mỗi hàm để xác định xem chuỗi "là a" hay chuỗi "không phải là" nên được in trong đầu ra cho mỗi ký tự được kiểm tra. Ví dụ, dònga chỉ ra rằng nếu '8' là một chữ số — tức là, nếu isdigittrả về giá trị true (nonzero) — chuỗi "8 là a" được in. Nếu '8' không phải là một chữ số (tức là, nếuisdigit trả về 0), chuỗi "8 không phải là a" được in.
Ví dụ 2
Ví dụ sau minh họa việc sử dụng các hàm islower và isupper. Chức năngislowerxác định xem đối số của nó có phải là chữ thường (a – z) hay không. Chức năngisupper xác định xem đối số của nó có phải là một chữ cái viết hoa (A – Z) hay không.
int thisChar = 0xA0;
void setup () {
Serial.begin (9600);
Serial.print ("According to islower:\r") ;
Serial.print (islower( 'p' ) ? "p is a" : "p is not a" );
Serial.print ( " lowercase letter\r" );
Serial.print ( islower( 'P') ? "P is a" : "P is not a") ;
Serial.print ("lowercase letter\r");
Serial.print (islower( '5' ) ? "5 is a" : "5 is not a" );
Serial.print ( " lowercase letter\r" );
Serial.print ( islower( '!' )? "! is a" : "! is not a") ;
Serial.print ("lowercase letter\r");
Serial.print ("\rAccording to isupper:\r") ;
Serial.print (isupper ( 'D' ) ? "D is a" : "D is not an" );
Serial.print ( " uppercase letter\r" );
Serial.print ( isupper ( 'd' )? "d is a" : "d is not an") ;
Serial.print ( " uppercase letter\r" );
Serial.print (isupper ( '8' ) ? "8 is a" : "8 is not an" );
Serial.print ( " uppercase letter\r" );
Serial.print ( islower( '$' )? "$ is a" : "$ is not an") ;
Serial.print ("uppercase letter\r ");
}
void setup () {
}
Kết quả
According to islower:
p is a lowercase letter
P is not a lowercase letter
5 is not a lowercase letter
! is not a lowercase letter
According to isupper:
D is an uppercase letter
d is not an uppercase letter
8 is not an uppercase letter
$ is not an uppercase letter
Ví dụ 3
Ví dụ sau minh họa việc sử dụng các hàm isspace, iscntrl, ispunct, isprint và isgraph.
Chức năng isspace xác định xem đối số của nó có phải là ký tự khoảng trắng hay không, chẳng hạn như dấu cách (''), nguồn cấp dữ liệu biểu mẫu ('\ f'), dòng mới ('\ n'), dấu xuống dòng ('\ r'), tab ngang ('\ t ') hoặc tab dọc (' \ v ').
Chức năng iscntrl xác định xem đối số của nó có phải là ký tự điều khiển hay không, chẳng hạn như tab ngang ('\ t'), tab dọc ('\ v'), nguồn cấp dữ liệu biểu mẫu ('\ f'), alert ('\ a'), backspace ('\ b '), ký tự xuống dòng (' \ r ') hoặc dòng mới (' \ n ').
Chức năng ispunct xác định xem đối số của nó có phải là ký tự in không phải là dấu cách, chữ số hoặc chữ cái, chẳng hạn như $, #, (,), [,], {,},;,: hoặc%.
Chức năng isprint xác định xem đối số của nó có phải là một ký tự có thể được hiển thị trên màn hình hay không (bao gồm cả ký tự khoảng trắng).
Chức năng isgraph kiểm tra các ký tự giống như isprint, nhưng ký tự khoảng trắng không được bao gồm.
void setup () {
Serial.begin (9600);
Serial.print ( " According to isspace:\rNewline ") ;
Serial.print (isspace( '\n' )? " is a" : " is not a" );
Serial.print ( " whitespace character\rHorizontal tab") ;
Serial.print (isspace( '\t' )? " is a" : " is not a" );
Serial.print ( " whitespace character\n") ;
Serial.print (isspace('%')? " % is a" : " % is not a" );
Serial.print ( " \rAccording to iscntrl:\rNewline") ;
Serial.print ( iscntrl( '\n' )?"is a" : " is not a" ) ;
Serial.print (" control character\r");
Serial.print (iscntrl( '$' ) ? " $ is a" : " $ is not a" );
Serial.print (" control character\r");
Serial.print ("\rAccording to ispunct:\r");
Serial.print (ispunct(';' ) ?"; is a" : "; is not a" ) ;
Serial.print (" punctuation character\r");
Serial.print (ispunct('Y' ) ?"Y is a" : "Y is not a" ) ;
Serial.print ("punctuation character\r");
Serial.print (ispunct('#' ) ?"# is a" : "# is not a" ) ;
Serial.print ("punctuation character\r");
Serial.print ( "\r According to isprint:\r");
Serial.print (isprint('$' ) ?"$ is a" : "$ is not a" );
Serial.print (" printing character\rAlert ");
Serial.print (isprint('\a' ) ?" is a" : " is not a" );
Serial.print (" printing character\rSpace ");
Serial.print (isprint(' ' ) ?" is a" : " is not a" );
Serial.print (" printing character\r");
Serial.print ("\r According to isgraph:\r");
Serial.print (isgraph ('Q' ) ?"Q is a" : "Q is not a" );
Serial.print ("printing character other than a space\rSpace ");
Serial.print (isgraph (' ') ?" is a" : " is not a" );
Serial.print ("printing character other than a space ");
}
void loop () {
}
Kết quả
According to isspace:
Newline is a whitespace character
Horizontal tab is a whitespace character
% is not a whitespace character
According to iscntrl:
Newline is a control character
$ is not a control character
According to ispunct:
; is a punctuation character
Y is not a punctuation character
# is a punctuation character
According to isprint:
$ is a printing character
Alert is not a printing character
Space is a printing character
According to isgraph:
Q is a printing character other than a space
Space is not a printing character other than a space