Arduino - Karakter Fonksiyonları
Tüm veriler bilgisayarlara harfler, rakamlar ve çeşitli özel semboller içeren karakterler olarak girilir. Bu bölümde, tek tek karakterleri incelemek ve işlemek için C ++ 'nın yeteneklerini tartışıyoruz.
Karakter işleme kitaplığı, karakter verilerinin yararlı testlerini ve işlemlerini gerçekleştiren çeşitli işlevler içerir. Her işlev, bir int olarak gösterilen bir karakter veya bağımsız değişken olarak EOF alır. Karakterler genellikle tamsayı olarak manipüle edilir.
EOF'nin normalde –1 değerine sahip olduğunu ve bazı donanım mimarilerinin negatif değerlerin char değişkenlerinde depolanmasına izin vermediğini unutmayın. Bu nedenle, karakter işleme işlevleri, karakterleri tam sayı olarak işler.
Aşağıdaki tablo, karakter işleme kitaplığının işlevlerini özetlemektedir. Karakter işleme kitaplığındaki işlevleri kullanırken,<cctype> başlık.
S.No. | Prototip ve Açıklama |
---|---|
1 | int isdigit( int c ) C bir rakamsa 1, değilse 0 döndürür. |
2 | int isalpha( int c ) C bir harfse 1, değilse 0 döndürür. |
3 | int isalnum( int c ) C bir rakam veya harf ise 1, aksi takdirde 0 döndürür. |
4 | int isxdigit( int c ) C onaltılık bir rakamsa 1, aksi takdirde 0 döndürür. (İkili, sekizli, ondalık ve onaltılık sayıların ayrıntılı açıklaması için Ek D, Sayı Sistemleri'ne bakın.) |
5 | int islower( int c ) C küçük harf ise 1, aksi halde 0 döndürür. |
6 | int isupper( int c ) C bir büyük harf ise 1 döndürür; Aksi takdirde 0. |
7 | int isspace( int c ) C bir boşluk karakteriyse 1 döndürür - yeni satır ('\ n'), boşluk (''), form besleme ('\ f'), satır başı ('\ r'), yatay sekme ('\ t') veya dikey sekme ('\ v') - ve aksi takdirde 0. |
8 | int iscntrl( int c ) C, satırsonu ('\ n'), form besleme ('\ f'), satır başı ('\ r'), yatay sekme ('\ t'), dikey sekme (' \ v '), alert (' \ a ') veya backspace (' \ b ') - ve aksi takdirde 0. |
9 | int ispunct( int c ) C boşluk, rakam veya harf dışında bir yazdırma karakteriyse 1, aksi takdirde 0 döndürür. |
10 | int isprint( int c ) C boşluk ('') içeren bir yazdırma karakteriyse 1, aksi takdirde 0 döndürür. |
11 | int isgraph( int c ) C boşluk ('') dışında bir yazdırma karakteriyse 1, aksi takdirde 0 döndürür. |
Örnekler
Aşağıdaki örnek, işlevlerin kullanımını göstermektedir isdigit, isalpha, isalnum ve isxdigit. Fonksiyonisdigitargümanının bir rakam (0-9) olup olmadığını belirler. İşlevisalphaargümanının büyük harf mi (AZ) yoksa küçük harf mi (a – z) olduğunu belirler. İşlevisalnumbağımsız değişkeninin büyük harf mi, küçük harf mi yoksa rakam mı olduğunu belirler. Fonksiyonisxdigit bağımsız değişkeninin onaltılık basamak (A – F, a – f, 0–9) olup olmadığını belirler.
örnek 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 () {
}
Sonuç
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
Koşullu operatörü kullanıyoruz (?:)dizgenin "a" mı yoksa "a değil" mi olduğunu belirlemek için her işlev, test edilen her karakter için çıktıda yazdırılmalıdır. Örneğin, satıra '8' bir rakam ise, yani eğer isdigitgerçek (sıfır olmayan) bir değer döndürür - "8, a" dizesi yazdırılır. '8' bir rakam değilse (yaniisdigit 0 döndürür), "8 değil" dizesi yazdırılır.
Örnek 2
Aşağıdaki örnek, işlevlerin kullanımını göstermektedir islower ve isupper. İşlevislowerbağımsız değişkeninin küçük harf (a – z) olup olmadığını belirler. Fonksiyonisupper bağımsız değişkeninin büyük harf (A – Z) olup olmadığını belirler.
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 () {
}
Sonuç
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
Örnek 3
Aşağıdaki örnek, işlevlerin kullanımını gösterir isspace, iscntrl, ispunct, isprint ve isgraph.
İşlev isspace argümanının boşluk (''), form besleme ('\ f'), satırsonu ('\ n'), satır başı ('\ r'), yatay sekme ('\) gibi bir beyaz boşluk karakteri olup olmadığını belirler. t ') veya dikey sekme (' \ v ').
İşlev iscntrl argümanının yatay sekme ('\ t'), dikey sekme ('\ v'), form beslemesi ('\ f'), uyarı ('\ a'), geri al ('\ b) gibi bir kontrol karakteri olup olmadığını belirler '), satır başı (' \ r ') veya yeni satır (' \ n ').
İşlev ispunct argümanının boşluk, rakam veya harf dışında, $, #, (,), [,], {,},;,: veya% gibi bir yazdırma karakteri olup olmadığını belirler.
İşlev isprint argümanının ekranda görüntülenebilen bir karakter (boşluk karakteri dahil) olup olmadığını belirler.
İşlev isgraph isprint ile aynı karakterleri test eder, ancak boşluk karakteri dahil edilmez.
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 () {
}
Sonuç
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