آردوینو, توصیه شده

استفاده از رشته‌های کاراکتری زبان C + تقسیم متن جدا شده با کاما | قسمت دهم آموزش آردوینو

قسمت دهم آموزش آردوینو

در قسمت نهم از آموزش آردوینو به بررسی استفاده از تابع رشته‌ای آردوینو، پرداختیم. در این قسمت قصد داریم درباره استفاده از رشته‌های کاراکتری زبان C و تقسیم متن جدا شده با کاما (Comma-Separated) صحبت کنیم.

در ابتدای این مطلب چگونگی استفاده از رشته‌های کاراکتری را بررسی خواهیم کرد. همچنین، یاد خواهید گرفت که چگونه یک رشته (string) ایجاد، طول آن را اندازه‌گیری و رشته‌ها را مقایسه، کپی یا اضافه کنید.

استفاده از رشته‌های کاراکتری در توابع

آرایه‌های کاراکتری را رشته‌های کاراکتری نیز می‌نامند. در قسمت هشتم این آموزش، آرایه‌های آردوینو را به‌صورت کامل بررسی کردیم. در این قسمت چگونگی استفاده از رشته‌های کاراکتری در توابع توضیح داده شدند. اگر تابه‌حال برنامه‌نویسی زبان C یا C++ کار کرده باشید، احتمالاً عادت دارید که #include <string.h> را به کد خود اضافه کنید تا با این کار، به این توابع دسترسی داشته باشید. نرم‌افزار Arduino IDE این کار را به‌صورت اتوماتیک برای شما انجام می‌دهد، بنابراین دیگر شما نیازی به اضافه‌کردن #include <string.h> ندارید.

رشته‌ها را باید به صورت زیر بنویسید:

char stringA[8]; // declare a string of up to 7 chars plus terminating null

char stringB[8] = “Arduino”; // as above and initialize the string to “Arduino”

char stringC[16] = “Arduino”; // as above, but string has room to grow

char stringD[ ] = “Arduino”; // the compiler inits string and calculates size

به‌طورکلی، تابع strlen (مخفف string length) در زبان C++ برای محاسبه تعداد کاراکترهای قبل از کاراکتر null، استفاده می‌شود:

برای مثال برای محاسبه طول رشته stringA با استفاده از تابع strlen() مقدار ۷ را برمی‌گرداند. توجه داشته باشید که کاراکتر null در پایان رشته محاسبه نمی‌گردد.

از تابع strcpy (مخفف string copy) برای کپی‌کردن یک رشته در رشته دیگر استفاده می‌شود:

از تابع strncpy برای محدودکردن تعداد کاراکترهایی که باید کپی شوند، استفاده کنید. (این کار برای جلوگیری از نوشتن کاراکترهای بیش‌تر از ظرفیت رشته مقصد (رشته‌هدف)، مفید است).

 

همچنین، شما می‌توانید از تابع strcat (مخفف string concatenate) برای اتصال یک رشته به انتهای رشته دیگر استفاده کنید:

 

نکته✅

دقت‌کردن به این نکته بسیار مهم است. وقتی که رشته‌ها را کپی یا ادغام می‌کنیم، حتماً باید طول رشته مقصد (رشته‌هدف) را در نظر بگیریم. همچنین، باید فضای لازم برای کاراکتر null در پایان رشته را هم در نظر داشته باشیم.

شما می‌توانید برای مقایسه دو رشته از تابع strcmp (مخفف string compare) استفاده کنید:

 

نتیجه⚡

در محیط آردوینو، متن با استفاده از آرایه‌ای از کاراکترها به نام رشته‌ها (Strings) نمایش داده می‌شود. یک رشته از تعدادی کاراکتر تشکیل شده است که پس از آن یک کاراکتر null (مقدار 0) قرار دارد. کاراکتر null نمایش داده نمی‌شود، فقط نشان‌دهنده پایان رشته است.

توابعی که در این قسمت توضیح داده شده‌اند، بخشی از کتابخانه C’s string.h هستند. شما می‌توانید منابع آموزش آنلاین C/C++ را در صفحات cplusplus.com و C++ Referencepage مشاهده کنید.

تقسیم متن جدا شده با کاما (Comma-Separated)

فرض کنید شما یک رشته (string) دارید که شامل دو یا چند قسمت داده است؛ در این صورت، اگر این رشته را با کاما (یا هر جداکننده دیگری) به چند قسمت، تقسیم کنید، می‌توانید از هر کدام از این رشته ها به صورت رشته های جداگانه استفاده کنید.

اسکچ زیر متن موجود بین هر کاما را چاپ می‌کند:

 

همچنین، سریال مانیتور موارد زیر را نمایش می دهد:

Peter,Paul,Mary

Peter

Paul

Mary

این اسکچ از توابع String برای پیدا کردن متن از بین کاما، استفاده می‌کند. کد آن به صورت زیر است:

متغیر commaPosition موقعیت اولین کاما در رشته‌ی message ذخیره می کند (اگر کاما پیدا نشود، مقدار 1- برمی‌گرداند). اما اگر کاما وجود داشته باشد، تابع substring با گرفتن اندیس ابتدایی و انتهایی مقدار بین این دو اندیس را به صورت یک رشته برمی‌گرداند و کامای انتهایی آن در کد زیر از پیام حذف می‌شود:

تابع substring رشته‌ای را برمی‌گرداند که از commaPosition+1 (موقعیت بعد از اولین کاما) شروع می‌شود و طول به اندازه message.length() است. این پیغام فقط حاوی متنی است که پس از کاما اول قرار دارد. این کار تا زمانی تکرار می‌شود که کاما دیگری پیدا نشود (commaPosition برابر با 1- خواهد بود)

اگر شما یک برنامه‌نویس باتجربه هستید، می‌توانید از توابع سطح پایین (low-level) که بخشی از کتابخانه استاندارد C هستند، نیز استفاده کنید. با استفاده از رشته‌های آردوینو، اسکچ زیر عملکردی مشابه با قبلی دارد:

نکته✅

اگرچه که شما می‌توانید از پوینترهای آردوینو استفاده کنید، اما به‌طورکلی این کار در اسکچ‌ها ممنوع است؛ زیرا در این صورت درک‌کردن کد (به‌خصوص برای مبتدیان) سخت‌تر می‌شود. در عمل، به‌ندرت پوینترها یا توابع پیشرفته C را در اسکچ‌ها، مشاهده خواهید کرد. برای کسب اطلاعات بیش‌تر در مورد سبک کدنویسی پیشنهادی آردوینو، به لینک زیر مراجعه کنید.

https://www.arduino.cc/

در اینجا، تابع اصلی، تابعی به نام strtok_r (نام نسخه strtok که با کامپایلر آردوینو ارائه می‌شود) می‌باشد.

اولین باری که تابع strtok_r فراخوانده می‌شود، شما باید رشته‌ای را که می‌خواهید توکن کنید(به مقادیر جداگانه تقسیم کنید)، ارسال نمایید. اما هر بار که strtok_r، یک توکن جدید پیدا می‌کند، کاراکترهای این رشته را بازنویسی می‌کند؛ بنابراین بهتر است یک کپی از رشته را برای این تابع ارسال کنید همان‌طور که در این مثال نشان‌داده‌شده است.

پس از فراخوانی اول، از یک کاراکتر NULL به عنوان ارگومان ورودی استفاده می‌کند تا به تابع بگوید که باید به توکن بعدی برود. در این مثال، هر توکن در پورت سریال چاپ می‌شود. *p پوینتری است که strtok_r از آن برای پیگیری رشته‌ای که روی آن کار می‌کند، استفاده می‌نماید.

اگر توکن‌های شما فقط از اعداد تشکیل شده است، در قسمت‌های بعدی این آموزش همراه ما باشید تا استخراج مقادیر عددی که با کاما از کاراکترهای سریال جدا شده‌اند را یاد بگیرید.

برای کسب اطلاعات بیش‌تر در مورد توابع رشته‌ای زبان C مانند strtok_r به صفحه زیر مراجعه کنید:

AVR Libc home page

همچنین، برای آموزش توابع C/C++ strtok_r و strcmp به سایت زیر مراجعه نمایید:

Man7.org

در قسمت بعدی آموزش آردوینو درباره تبدیل عدد به رشته توضیح خواهیم داد. پس در ادامه این آموزش حتماً همراه سیسوگ باشید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

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

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