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