رشته یا String یکی از انواع داده پراهمیت در زبان های برنامه نویسیزبان های برنامه نویسی چیست؟این مقاله عالی توضیح داده که زبان های برنامه نویسی چیست؟ و انواع زبان های برنامه نویسی و بهترین زبان برنامه نویسی برای شروع و پردرآمدترین آنها را معرفی کرده میباشد. هدف از این مقاله آشنا کردن خواننده با رشته ها و کار کردن با آنها میباشد. بهطور قطع، کل مطالب مربوط به رشته ها در این مقاله نمیگنجد اما با خواندن این مقاله و مقداری تمرین شما میتوانید گلیم خود را از آب بیرون بکشید و آماده دریافت مطالب پیشرفتهتر شوید. برای آشنا کردن شما با رشته ها، از دو زبان محبوب پایتونزبان برنامه نویسی پایتون چیست؟ – نحوه شروع و دلایل محبوبیتزبان برنامه نویسی پایتون (Python) چیست؟ این مقاله عالی به بررسی دلایل محبوبیت پایتون، موارد استفاده از پایتون و نحوه شروع به برنامه نویسی پایتون پرداخته و سی پلاس پلاسبرنامه نویسی سی پلاس پلاس چیست؟ مزایای برنامه نویسی C++؟برنامه نویسی سی پلاس پلاس چیست و چه کاربردی دارد؟ این صفحه عالی به بررسی مزایای برنامه نویسی C++ پرداخته و نمونه هایی از کدهای زبان برنامه نویسی ++C را آورده استفاده شده است. مفاهیم کلی مربوط به رشته ها تقریبا یکی است و درصورت آشنایی با رشته ها در این دو زبان، بهراحتی با رشته ها در زبانهای دیگر میتوانید کار کنید.
رشته یا استرینگ در برنامه نویسی چیست؟
قبل از آشنایی با رشته یا String، لازم است تعریف کاراکتر در برنامه نویسی را بدانید. در علم کامپیوتر، یک کاراکتر واحد نمایش اطلاعاتی است که معادل یک حرف یا علامت (سمبل) است مانند ‘a’ یا ‘2’ یا ‘#.’ رشته یا استرینگ در برنامه نویسی، آرایهای از کاراکترها میباشد. در ادامه به پیاده سازی و کار کردن با رشته ها در چند زبان برنامه نویسی معروف میپردازیم.
رشته در پایتون
از آنجا که زبان پایتون، زبان سطح بالا و نزدیک به زبان انسان میباشد، با این زبان آغاز به کار میکنیم. رشتهها را در پایتون میتوان با استفاده از Single Quote، Double Quote یا حتی با Triple Quote در مواردی که رشته خیلی طولانی است، ایجاد کرد.
String1 = 'Hello There!'
String2 = "Konkurcomputer"
String3 = '''Welcome to the Konkurcomputer website, I'm your host.'''
برای دسترسی به تک تک کاراکترهای هر رشته مشابه آرایهها، اندیسگذاری میکنیم. اندیس، داخل براکت قرار میگیرد. برای فهم بهتر به قطعه کد زیر دقت کنید که خروجیها در جلوی هر خط نوشته شده است:
print(String1[0]) # H
print(String1[1]) # e
print(String1[-1]) # !
print(String1[2:5]) # llo
print(String2[4:]) # urcomputer
print(String2[:4]) # konk
خط اول، اندیس صفرم رشته String1 را در خروجی چاپ میکند که چون شمارهگذاری اندیسها از صفر آغاز میشود، اولین کاراکتر را برمیگرداند. خط دوم، اندیس اول یعنی دومین کاراکتر را چاپ میکند. خط سوم با گذاشتن عدد منفی پشت اندیس از آخر شروع به چاپ میکند، مثلا در این مثال آخرین کاراکتر رشته را چاپ میکند. خط چهارم با گذاشتن علامت ":" بازهای از رشته ها را برمیگرداند، با شروع از اندیس 2 تا اندیس 5 بجز خود 5. خط 5 چون اندیسی برای انتها مشخص نشده است، شروع به چاپ String2 از اندیس 4 تا اندیس آخر میکند و خط آخر برعکس خط 5 عمل میکند.
برای اتصال رشته ها به هم میتوان از "+" بهصورت زیر استفاده کرد:
print(String1[0:2] + 'p' + String1[3:]) # Heplo!
# He # lo!
از آنجا که پایتون یک زبان شی گرا (Object-Oriented)برنامه نویسی شی گرا چیست؟ شی گرایی چیست؟این صفحه عالی به معرفی برنامه نویسی شی گرا پرداخته و توضیح داده شی گرایی یا همان object oriented یا OPP چیست؟ همچنین مزایای برنامه نویسی شی گرا را بیان کرده است، هر رشته هم یک شی است که بهطور پیشفرض در پایتون وجود دارد، برای آن تعداد زیادی متد تعریف شده که میتوان از آنها برای انجام کارهای مختلف استفاده کرد. برای این مقاله فعلا همین که نحوه استفاده از متدها را بدانید، کافی است. تعدادی از متدهای پرکاربرد در ادامه آمده است:
کاربرد | متد |
---|---|
تعداد تکرار رشته val را در یک رشته برمیگرداند | Str.count(val) |
در رشته دنبال زیررشته val میگردد و جایگاه اولین رخداد Val را برمیگرداند. | Str.find(val) |
اگر تمام کاراکترهای رشته الفبا باشد مقدار True برمیگرداند. | Str.isalpha() |
لیست یا تاپل val متشکل از چندین رشته را به هم متصل و به یک رشته واحد تبدیل میکند. | Str.join(val) |
حروف بزرگ انگلیسی را به حروف کوچک تبدیل میکند. | Str.lower() |
یک رشته را با یک جداکننده جدا میکند و یک لیست از رشته های جدا شده برمیگرداند. | Str.split(val) |
در ادامه نحوه یادگیری از این متدهای معروف را خواهیم دید:
text = "I love cars, seeing a new car makes me happy"
x = text.count("car")
print(x) # 2
text = "welcome to Konkurcomputer"
x = text.find("Konkurcomputer")
print(x) # 11
txt = "CompanyX"
x = txt.isalpha()
print(x) # True
myTuple = ("Ali", "goes", "to", "school")
x = "*".join(myTuple)
print(x) # Ali*goes*to*school
text = "Happy New YEAR"
x = text.lower()
print(x) # happy new year
text = "welcome to the jungle"
x = text.split(' ')
print(x) # ['welcome', 'to', 'the', 'jungle']
بهعنوان نکته آخر، خوب است بدانید که میتوانید با استفاده از حلقهحلقه در برنامه نویسی چیست؟ حلقه یا لوپ (Loop) چیست؟این مقاله عالی به زبان ساده و با استفاده از فیلم توضیح داده که حلقه در برنامه نویسی چیست، همچنین در خصوص حلقه یا لوپ (Loop) بی نهایت صحبت کرده است For رشته را پیمایش کنید.
رشته در C++
C++ دو نوع نمایش رشته زیر را ارائه میدهد:
- The C-Style Character String
- The String Class in C++
روش اول مشابه روش نمایش رشتهها در زبان برنامه نویسی C زبان برنامه نویسی C – مزایا و کاربرد زبان C – فرق C و ++Cاین مقاله عالی ابتدا توضیح میدهد که زبان برنامه نویسی c چیست، سپس به بررسی مزایا و معایب زبان C ، کاربردهای زبان سی ، و تفاوت بین C و ++C میپردازد میباشد. در روش دوم از کلاس String در C++ استفاده میشود. در ادامه بهطور دقیقتر این دو روش را بررسی میکنیم.
روش C-Style یا مشابه زبان C
این روش از زبان C سرچشمه میگیرد و همچنان در C++ پشتیبانی میشود. در این روش، یک استرینگ در واقع یک آرایه یک بعدی از کاراکترهاست که با یک کاراکتر تهی '\0' خاتمه مییابد. این پایان یافتن با کاراکتر تهی مهم است زیرا به کامپایلر (Compiler)کامپایلر چیست و چگونه کار میکند و چرا از آن استفاده میشود؟کامپایلر (Compiler) یک برنامهی خاص برای ترجمه سورس کدهای (Source Code) یک زبان برنامه نویسی، به زبان ماشین یا بایت کد و یا یک زبان برنامه نویسی دیگر است میگوید که رشته کجا تمام میشود. برای تعریف یک رشته به این روش میتوان به یکی از دو شکل زیر عمل کرد:
char my_str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char myStr[] = "Hello";
در روش اول از آن جایی که باید یک کاراکتر تهی نیز به آرایه اضافه کنیم، طول آرایه یک واحد بزرگتر از طول رشته است. در روش دوم مشخصا طول استرینگ را در موقع تعریف تعیین نمیکنیم و خود کامپایلر با توجه به مقداردهی ما طول آن را تعیین میکند. به تکه کد زیر برای درک بهتر دقت کنید:
cout<<my_str<<endl; // Hello
cout<<myStr<<endl; // Hello
cout<<sizeof(my_str)<<endl; // 6
cout<<sizeof(myStr)<<endl; // 6
توجه کنید در اینجا از تابع sizeof() برای یافتن طول رشته استفاده میشود.
کلاس string در C++
کتابخانه استاندارد C++ یک نوع کلاس رشتهای را ارائه میدهد که از تمام عملیات ذکر شده در بالا پشتیبانی میکند، علاوه بر این، عملکردهای بسیار بیشتری را نیز پشتیبانی میکند. استفاده از کلمه کلیدی "string" بهترین و راحتترین راه برای تعریف رشته است:
string str1 = "Hello";
دقت کنید که توابعی که برای هر نوع از این دو نوع رشته تعریف میشود مختص خود آن نوع میباشد و احتمالا روی دیگری کار نمیکند یا مقدار متفاوتی برمیگرداند، مثلا در مورد تکه کردن رشته به کد زیر دقت کنید:
string str1 = "C++ is the best!";
char str2[] = "So is Konkurcomputer";
cout << str1.substr(7) << endl; // the best!
cout << str1.substr(8, 2) << endl; // he
cout << str2.substr(5) << endl; // ERROR
تابع str.substr(a, b) برای کلاس string در C++ میباشد و به این صورت عمل میکند که زیر رشته با آغاز از a به طول b را برمیگرداند. اگر مقدار b را مشخص نکنیم تا انتهای رشته برگردانده میشود. همانطور که در قطعه کد بالا مشخص است در صورت استفاده از این تابع برای رشتههای از نوع C-Style با خطا روبهرو میشویم. در ادامه به چند مورد از توابع معروف رشته های کلاس string در C++ اشاره میکنیم:
برای یادگیری بهتر کار با رشته ها بهطور عملی به قطعه کد زیر و خروجیهای متناظرشان دقت کنید:
کاربرد | متد |
---|---|
طول رشته مورد نظر را برمیگرداند. | Str.length() |
این تابع برای خواندن یک رشته وارد شده توسط کاربر استفاده میشود. | .getline(a,b) |
این تابع برای افزودن کاراکترها در انتهای یک رشته استفاده میشود. | Str.push_back(a) |
این تابع برای حذف 1 کاراکتر از انتهای یک رشته استفاده میشود. | Str.pop_back() |
این تابع برای افزایش یا کاهش اندازه یک رشته استفاده میشود. | Str.resize(a) |
یک زیررشته b کاراکتری با شروع از اندیس c از رشته Str را در رشته a که بصورت C-Style تعریف شده، کپی میکند. | Str.copy(a,b,c) |
string str1 = "C++ is the best!";
cout << str1[2] << endl; // +
cout << str1.length() << endl; // 16
str1.push_back(' ');
str1.push_back('K');
str1.push_back('O');
cout << str1 << endl; // C++ is the best! KO
str1.pop_back();
cout << str1 << endl; // C++ is the best! K
str1.resize(10);
cout << str1 << endl; // C++ is the
str1.copy(str2, 4, 5);
cout << str2 << endl; // s th
توابع معرفی شده در زبانهای پایتون و C++ بسیار بیشتر از موارد گفته شده است و شما توانید با بررسی Documentationهای هر زبان با توابع بیشتری آشنا شوید.
جمعبندی
در این مقاله سعی شد مفاهیم اصلی مربوط به رشته یا استرینگ و نحوه کار با آن پوشش داده شود. حتما دقت کنید که مفاهیم مربوط به رشته ها بیشتر از مواردی است که در این مقاله گفته شد و از پوشش کارهایی که علاوه بر رشته ها نیاز به دانش در مورد مفاهیم دیگری داشت تا جای ممکن خودداری شده است. در برنامه نویسی لزومی بر حفظ موارد گوناگون نیست و بهتر است به مفاهیم پایه مسلط شوید و برای کاراییهای بیشتر از گوگل برای سرچ استفاده کنید.
چطور میتوان طول یک رشته را پیدا کرد؟
برای انجام این کار در زبانهای برنامهنویسی مختلف، تابع، متد و یا ویژگی (Attribute) بهخصوص وجود دارد که در آن زبان برای رشته ها تعریف شده است. مثلا در پایتون تابع ()len وجود دارد که اگر یک استرینگ بهعنوان ورودی بگیرد، طول آن استرینگ را بهعنوان خروجی برمیگرداند.
Regex یا Regular Expressions چیست و چه ارتباطی با رشته دارد؟
عبارات منظم (Regular Expressions) که به عنوان Regex نیز شناخته میشوند، دنباله ای از کاراکترها هستند که یک الگوی جستجو را در مجموعه رشته ها تعریف میکنند و در بسیاری از زبانهای برنامهنویسی و ویرایشگرهای متن برای جستجو، جایگزینی و دستکاری متن بر اساس یک الگو استفاده میشوند.
چگونه یک رشته را به حروف بزرگ یا کوچک تبدیل کنم؟
معمولا برای انجام این کار و بسیاری از کارهای دیگر، توابع یا متدهایی در هر زبان برای رشته ها وجود دارد. در بعضی از زبانها هم باید با پیمایش رشته و پیاده سازی یک الگوریتم ساده این کار را انجام داد، مثلا در زبان پایتون متد lower() بر روی یک رشته، آن را به حروف کوچک تبدیل میکند.
الگوریتمهای معروف مربوط به رشته ها کدامند؟
بعضی از رایجترین الگوریتم های مربوط به رشته ها عبارتند از:
الگوریتم های تطبیق رشته ها: این الگوریتمها برای یافتن وقوع و موقعیت یک زیررشته در یک رشته بزرگتر استفاده میشوند.
الگوریتمهای مرتبسازی رشتهها: از این الگوریتمها برای مرتبسازی مجموعهای از رشتهها به ترتیب خاص، مانند ترتیب حروف الفبا استفاده میشود.
الگوریتمهای فشردهسازی رشتهها: این الگوریتمها برای فشردهسازی یک رشته به یک نمایش کوچکتر استفاده میشوند، در حالی که میتوان آن را به شکل اولیهاش از حالت فشرده خارج کنیم.
آیا میتوان یک رشته را به یک Integer تبدیل کرد؟
یک رشته از یک یا چند کاراکتر تشکیل شده است که می تواند شامل حروف، اعداد و انواع دیگر کاراکترها باشد، حال درصورتی که کاراکترهای استفاده شده در آن رشته فقط عدد و قابل تغییر به Int باشند، این کار امکانپذیر است و در غیر این صورت برای انجام این کار با خطا مواجه میشویم.