آردوینو – توابع کاراکتری، همه اطلاعاتی که به کامپیوتر وارد میشود به صورت کاراکتری است که شامل حروف، اعداد و علائم و نمادهای میباشد. در این بخش، با تواناییهای زبان ++C در کار کردن با کاراکترها آشنا میشویم.
کتابخانههای کار با کاراکترها شامل توابعی هستند که میتوانیم توسط آنها تغییرات مورد نظر را بر روی کاراکترها اعمال کنیم یا اطلاعات مورد نظر را از انها استخراج کنیم. هر تابع یک کاراکتر از نوع int یا EOF را به عنوان آرگومان میگیرد. عملیات بر روی کاراکترها معمولا به عنوان عدد صحیح انجام میشود.
به خاطر داشته باشید که معمولا EOF معادل عدد -1 است و برخی از سخت افزارها اجازه ذخیره سازی اعداد منفی را در متغیرهای char را نمیدهند. بنابراین این توابع کاراکترها را به عنوان عدد صحیح در نظر میگیرند.
جدول زیر خلاصه ای از توابع کار با کاراکترها را شامل میشود. اگر میخواهید از این توابع استفاده کنید در ابتدای برنامه فایل سرآمد <cctype> را به برنامه اضافه (include) کنید.
شماره | تعریف تابع و توضیحات |
1 |
int isdigit( int c ) در صورتی که c یک عدد باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
2 |
int isalpha( int c ) در صورتی که c یک حرف باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
3 |
int isalnum( int c ) در صورتی که c یک عدد یا حرف باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
4 |
int isxdigit( int c ) در صورتی که c یک عدد در مبنای 16 باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. (برای مشاهده جزئیات سیستمهای عددی در مبنای دو، هشت، ده و شانزده به پیوست D مراجعه شود) |
5 |
int islower( int c ) در صورتی که c یک حرف کوچک باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
6 |
int isupper( int c ) در صورتی که c یک حرف بزرگ باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
7 |
int isspace( int c ) در صورتی که c یکی از انواع کاراکترهای شامل خط جدید (‘\n’)، فاصله (‘ ‘)، (‘\f’)، (‘\r’)،فاصله tab افقی (‘\t’) یا فاصله tab عمودی (‘\v’) باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
8 |
int iscntrl( int c ) در صورتی که c یکی از انواع کاراکترهای کنترلی شامل خط جدید (‘\n’)، (‘\f’)، (‘\r’)، فاصله tab افقی (‘\t’) ، فاصله tab عمودی (‘\v’)، صدای هشدار (‘\a’)، (‘\b’) یا backspace باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
9 |
int ispunct( int c ) در صورتی که c یک حرف قابل چاپ به غیر از فاصله، عدد یا حرف باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
10 |
int isprint( int c ) در صورتی که c یک حرف شامل فاصله (‘ ‘) باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
11 |
int isgraph( int c ) در صورتی که c یک حرف به غیر از فاصله (‘ ‘) باشد مقدار یک بازگردانده میشود، در غیراینصورت مقدار صفر بازگردانده میشود. |
مثالهایی از توابع کاراکتری:
مثال پیش رو نحوه استفاده از توابع isdigit ، isalpha ، isalnum و isxdigit را نشان میدهد. تابع isdigit تعیین میکند که آیا ورودی آن یک عدد (0–9) میباشد یا خیر. تابع isalpha تعیین میکند که آیا ورودی آن یک حرف بزرگ (A-Z) میباشد یا یکی از حروف کوچک (a-z). تابع isalnum تعیین میکند که ورودی آن یک حرف بزرگ، حرف کوچک یا عدد است. تابع isxdigit تعیین میکند که آیا ورودی آن یک عدد در مبنای 16 میباشد یا خیر. (A–F, a–f, 0–9)
مثال 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 () { }
نتایج:
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
ما در هر تابع از عملگر شرطی (?:) به منظور تعیین این مسئله که آیا برای هر کاراکتر باید عبارت ” is a ” یا ” is not a ” چاپ شود استفاده میکنیم. به عنوان مثال در خط a تعیین شده است که اگر ‘8’ یک عدد است، تابع isdigit مقدار یک را برمیگرداند، عبارت “8 is a ” چاپ میشود. اگر ‘8’ یک عدد نیست، تابع isdigit مقدار صفر را برمیگرداند، عبارت “8 is not a ” چاپ میشود.
مثال 2:
مثال پیش رو نحوه استفاده از توابع islower و isupper را نشان میدهد. تابع islower تعیین میکند که آیا ورودی آن یک حرف کوچک (a-z) است یا خیر. تابع isupper تعیین میکند که آیا ورودی آن یک حرف بزرگ (A-Z) است یا خیر.
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 () { }
نتایج:
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
مثال 3:
مثال پیش رو نحوه استفاده از توابع isspace ، iscntrl ، ispunct ، isprint و isgraph را نشان میدهد:
- تابع isspace تعیین میکند که آیا ورودی آن یکی از انواع کاراکترهای شامل خط جدید (‘\n’)، فاصله (‘ ‘)، (‘\f’)، (‘\r’)،فاصله tab افقی (‘\t’) یا فاصله tab عمودی (‘\v’) میباشد یا خیر.
- تابع iscntrl تعیین میکند که آیا ورودی آن یکی از انواع کاراکترهای کنترلی شامل خط جدید (‘\n’)، (‘\f’)، (‘\r’)، فاصله tab افقی (‘\t’) ، فاصله tab عمودی (‘\v’)، صدای هشدار (‘\a’)، (‘\b’) یا backspace میباشد یا خیر.
- تابع ispunct تعیین میکند که آیا ورودی آن یک حرف قابل چاپ به غیر از فاصله، عدد یا حرف میباشد یا خیر، مانند $, #, (, ), [, ], {, }, ;, : or %.
- تابع isprint تعیین میکند که آیا ورودی آن یک حرف قابل چاپ شامل فاصله (‘ ‘) میباشد یا خیر.
- تابع isgraph تعیین میکند که آیا ورودی یک حرف به غیر از فاصله (‘ ‘) میباشد یا خیر.
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 () { }
نتایج:
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
پایان جلسه، امیدوارم این نوشته برایتان مفید واقع شده باشد.
منبع: میکرودیزاینرالکترونیک