مهندس موفق الکترونیک

آردوینو – توابع کاراکتری

آردوینو – توابع کاراکتری، همه اطلاعاتی که به کامپیوتر وارد می شود به صورت کاراکتری است که شامل حروف، اعداد و علائم و نمادهای میباشد. در این بخش، با توانایی های زبان ++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

پایان جلسه ، تمام جلسات آردوینو را اینجا مطالعه کنید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>
مطلب پیشنهادی:  نصب بوت لودر روی ATmega328 با آردوینو UNO

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *