رشتههای متنی به دو روش نمایش داده میشوند: میتوانید از نوعدادهی string در آردوینو استفاده کنید که بخشی از هستهی ورژن 0019 است و یا با آرایهای از نوع char که به null ختم میشود، رشته را درست کنید. در این صفحه، روش دوم توضیح داده میشود. برای مشاهدهی توضیحات شیء string در آردوینو، که به شما عملکرد بهتر در ازای حافظهی بیشتر میدهد، به صفحه شیء string مراجعه کنید.
مثالها:
همهی مثالهای زیر، برای تعریف (اعلان) string، معتبر هستند:
1 2 3 4 5 6 | char Str1[15]; char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'}; char Str4[ ] = "arduino"; char Str5[8] = "arduino"; char Str6[15] = "arduino"; |
راههای تعریف string:
– تعریف یک آرایه از نوع char بدون مقداردهی اولیه (Str1).
– تعریف یک آرایه از نوع char (با یک جای خالی) که خود کامپایلر کاراکترِ null موردنیاز را اضافه خواهد کرد (Str2).
– تعریف یک آرایه از نوع char با افزودن کاراکتر null بهصراحت در انتها (Str3).
-مقداردهی اولیه با یک ثابت رشتهای در علامت کوتیشن. کامپایلر اندازهی آرایه را طوری تعیین خواهد کرد که بتواند ثابت رشتهای به همراه کاراکتر null را در خود جای دهد (Str4).
-مقداردهی اولیه به آرایه با اندازهای مشخص و ثابت رشتهای (Str5).
-مقداردهی اولیه به آرایه به همراه فضای بیشتر برای رشتههایی با طول بیشتر (Str6).
ختم کنندهی null
بهطورکلی رشتهها به کاراکتر null (کد اسکی 0) ختم میشوند. null به توابعی مثل ()Serial.print اعلام میکند که انتهای رشته کجاست. وگرنه این نوع توابع بیتهایی از حافظه که جز رشته نیستند را نیز خواهند خواند. به دلیل وجود همین کاراکتر null است که رشتهها به یک خانهی اضافی، علاوه بر طول مقدارشان، برای ذخیره null نیاز خواهند داشت. به همین خاطر است که گرچه “arduino” هفت کاراکتر است اما Str2 و Str5 باید 8 کاراکتری باشند (خانهی آخر رشته بهصورت خودکار با null پر خواهد شد). اندازهی Str4 نیز خودکار 8 کاراکتر خواهد شد؛ یکی اضافهتر برای ذخیرهی null. در Str3 ما خودمان کاراکتر null را صریحاً اضافه کردهایم (با نوشتن ‘\0’).
توجه کنید که میشود رشتهای بدون null ختم کننده داشت (برای مثال اگر طول Str2 را به جای 8 کاراکتر، 7 کاراکتر در نظر بگیرید). اما این کار عملکرد بسیاری از توابعی که با رشته کار میکنند را نادرست میکند؛ پس نباید عمداً این کار را انجام داد. اگر متوجه رفتاری عجیب (هنگام عملیات روی کاراکترها، نه رشتهها) شدید، ممکن است علت، همین کار باشد.
تک کوتیشن یا دابل کوتیشن؟
رشتهها همیشه درون دابل کوتیشن (“abc”) و کاراکترها همیشه درون تک کوتیشن (‘a’) تعریف میشوند.
شکستن و ذخیرهی رشتههای طولانی
میتوانیم رشتههای طولانی را با این روش بشکنیم و ذخیره کنیم:
1 2 3 | char myString[] = "This is the first line" " this is the second line" " etcetera"; |
آرایهای از رشتهها:
هنگام کار با برنامههایی که دارای حجم زیادی از متن هستند (مانند پروژه با نمایشگر LCD)، معمولا راحت است که آرایهای از رشته را تعریف کنیم. از آنجا که رشتهها خود آرایه هستند، این کار در واقع مثالی از آرایههای دو بعدی است.
در کد زیر (*char)، علامت * بعد از نوعدادهی char، نشاندهندهی این است که این، آرایهای از اشارهگرها است. تمامی نامِ آرایهها در واقع اشارهگر هستند؛ پس برای ساخت آرایهای از آرایهها، این کار لازم است. مبحث اشارهگرها برای مبتدیان در زبان C، کمی مبهم و سخت است؛ اما در اینجا برای استفادهی موثر از اشارهگرها، نیازی به فهم دقیق آنها نیست.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | char* myStrings[]={"This is string 1", "This is string 2", "This is string 3", "This is string 4", "This is string 5","This is string 6"}; void setup(){ Serial.begin(9600); } void loop(){ for (int i = 0; i < 6; i++){ Serial.println(myStrings[i]); delay(500); } } |
سلام.
من یه کدی دارم.
میخام بگم قبل از ویرگول رو بریز توی متغیر X و بعد از ویرگول رو بریز تو متغیر Y.
نمیدونم باید چه کدی براش بنویسم اگه راهنمایی کنید ممنون میشم.
خیلی ساده است
String input = "123;456";
String firstVal, secondVal;
for (int i = 0; i < input.length(); i++) { if (input.substring(i, i+1) == ";") { firstVal = input.substring(0, i); secondVal = input.substring(i+1); break; } }
سلام خسته نباشید
من یه کدی دارم میخام بگم مثلا قبل از ویرگول را داخل متغیر x بریز و بعد ویرگول را داخل متغیر y بریز.
یه راهنمایی میکنید که چطور باید این کارو انجام بدم؟
ممنون میشم.
سلام
مشکل چیه که متغیر string تو ide آردوینو ارور میده؟
نمیشناسه اصلن
رنگی نمیشه نوع متغیر 🙁
سلام
دوست عزیز ، String رو با اس بزرگ بنویسید مثل زیر
String 🙂