رشته ها در زبان متلب
ایجاد یک رشته از کاراکترها در زبان MATLAB کار خیلی ساده ای است. برای مثال اگر دستور زیر را در command prompt وارد کنید:
1 | my_string = Sample Text' |
متلب آن را اجرا کرده و خروجی زیر را تولید خواهد کرد:
1 | my_string = Sample Text |
زبان برنامه نویسی متلب همه متغیرها را به صورت آرایه در نظر می گیرد و رشته ها نیز به صورت آرایه از کاراکترها در نظر گرفته می شوند. برای بررسی این موضوع می توانید از دستور whos مانند نمونه زیر استفاده کنید:
1 | whos |
خروجی:
1 2 | Name Size Bytes Class Attributes my_string 1x16 32 char |
شما می توانید از توابع تبدیلی عددی مانند uint8 یا uint16 به منظور تبدیل کاراکترها در یک رشته به کدهای ascii استفاده کنید. تابع char برعکس این عمل را انجام می دهد (یعنی عدد به کاراکتر).
مثال:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 | my_string = 'Sample Text'; str_ascii = uint8(my_string) % 8-bit ascii values str_back_to_char= char(str_ascii) str_16bit = uint16(my_string) % 16-bit ascii values str_back_to_char = char(str_16bit) |
خروجی کد فوق:
1 2 3 4 5 6 7 8 9 10 | str_ascii = 83 97 109 112 108 101 32 84 101 120 116 str_back_to_char = Sample Text str_16bit = 83 97 109 112 108 101 32 84 101 120 116 str_back_to_char = Sample Text |
آرایه کاراکتر مستطیلی
تا اینجا برای نگه داری رشته ها از آرایه ها یک بعدی استفاده کردیم. اما اگر بخواهیم چندین رشته را نگه داریم می توانیم از آرایه کاراکتر مستطیلی استفاده کنیم. سادهترین راه برای ایجاد این نوع آرایه، چسباندن دو (یا چند) آرایه یک بعدی از کاراکتر به هم است (افقی یا عمودی).
برای ترکیب رشته ها به صورت عمودی می توان از روش ها زیر استفاده کرد:
- استفاده از عملگر [] متلب و جدا سازی هر سطر با استفاده از (;). توجه داشته باشید که در این روش هر سطر باید تعداد کاراکتر یکسانی داشته باشد. برای رشته هایی که طول متفاوتی دارند، باید از کاراکتر فضای خالی برای تنظیم طول رشته ها استفاده کنید.
- استفاده از تابع char. اگر رشته ها طول متفاوتی داشته باشند، این تابع رشته های کوتاه تر را با جای خالی پر می کند تا همه سطرها طول یکسان داشته باشند.
مثال:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 | doc_profile = ['Zara Ali '; ... 'Sr. Surgeon '; ... 'R N Tagore Cardiology Research Center'] doc_profile = char('Zara Ali', 'Sr. Surgeon', ... 'RN Tagore Cardiology Research Center') |
خروجی:
1 2 3 4 5 6 7 8 | doc_profile = Zara Ali Sr. Surgeon R N Tagore Cardiology Research Center doc_profile = Zara Ali Sr. Surgeon RN Tagore Cardiology Research Center |
برای ترکیب رشته های به صورت افقی هم می توانید از روش ها زیر استفاده کنید:
- استفاده از عملگر [] متلب و جدا کردن رشته ها با کاما یا فضای خالی. این روش تمام فضاهای خالی را حفظ می کند.
- استفاده از تابع strcat. این تابع فضاهای خالی را حذف می کند.
مثال:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 | name = 'Zara Ali '; position = 'Sr. Surgeon '; worksAt = 'R N Tagore Cardiology Research Center'; profile = [name ', ' position ', ' worksAt] profile = strcat(name, ', ', position, ', ', worksAt) |
خروجی:
1 2 | profile = Zara Ali , Sr. Surgeon , R N Tagore Cardiology Research Center profile = Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center |
ترکیب رشته ها در یک آرایه سلولی
کاملا واضح است که روشی که در بالا برای ترکیب رشته ها گفته شد، برای رشته هایی با طول متفاوت دردسر ساز است. با این حال روش بهتری برای انجام این کار وجود دارد و آن تبدیل نتیجه به آرایه سلولی است. آرایه سلولی در متلب می تواند داده هایی با طول و نوع مختلف را در خود نگه دارد. بنابراین برای نگه داری رشته هایی با طول مختلف نیز می تواند مناسب باشد. تاب cellstr به منظور تبدیل آرایه ای از کاراکتر به یک آرایه سلولی از رشته ها استفاده می شود.
مثال:
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 6 | name = 'Zara Ali '; position = 'Sr. Surgeon '; worksAt = 'R N Tagore Cardiology Research Center'; profile = char(name, position, worksAt); profile = cellstr(profile); disp(profile) |
خروجی:
1 2 3 4 5 | { [1,1] = Zara Ali [2,1] = Sr. Surgeon [3,1] = R N Tagore Cardiology Research Center } |
توابع مربوط به رشته ها در متلب
متلب توابع مختلفی را به منظور ایجاد، ترکیب، تجزیه، مقایسه و دستکاری رشته ها ارائه می دهد که در جدول زیر آن ها را مشاهده می کنید.
تابع | هدف |
توابع مربوط به نگه داری متن در آرایه کاراکتری، ترکیب آرایه کاراکتری و غیره | |
blanks | رشته از فضای خالی ایجاد می کند |
cellstr | از آرایه کاراکتری، آرایه سلولی از رشته ها ایجاد می کند |
char | به آرایه کاراکتری تبدیل می کند |
iscellstr | مشخص میکند که آیا ورودی یک آرایه سلولی از شته ها است یا خیر |
ischar | مشخص می کند که آیا ورودی یک آرایه کاراکتری است یا خیر |
sprintf | داده ها را به صورت رشته قالب بندی می کند |
strcat | رشته ها را به صورت افقی به هم وصل می کند |
strjoin | رشته های موجود در آرایه سلولی را به یک رشته واحد تبدیل می کند |
توابع مربوط به شناسایی بخش هایی از رشته، پیدا و جایگزین کردن زیر رشته ها | |
ischar | مشخص می کند که آیا ورودی یک آرایه کاراکتری است یا خیر |
isletter | عناصری از آرایه که حروف الفبا هستند |
isspace | عناصری از آرایه که کاراکتری فضای خالی هستند |
sscanf | داده های قالب بندی شده را از رشته می خواند |
strfind | یک رشته را در داخل رشته دیگر پیدا می کند |
strrep | یک رشته را در رشته دیگر جایگزین می کند |
strsplit | رشته با استفاده از جدا کننده مشخص شده از هم جدا می کند |
strtok | بخش های انتخاب شده از رشته |
validatestring | اعتبار متن رشته ای را بررسی می کند |
symvar | متغیرهای symbolic راغ در یک عبارت مشخص می کند |
regexp | مطابقت عبارت منظم را بررسی می کند (حساس به حروف بزرگ و کوچک است) |
regexpi | مطابقت عبارت منظم را بررسی می کند (حساس به حروف بزرگ و کوچک نیست) |
regexprep | یک رشته را با استفاده از عبارت منظم جایگزین می کند |
regexptranslate | عبارت منظم را به رشته ترجمه می کند |
توابع مربوط به مقایسه رشته ها | |
strcmp | رشته ها را مقایسه می کند (حساس به حروف بزرگ و کوچک است) |
strcmpi | رشته ها را مقایسه می کند (حساس به حروف بزرگ و کوچک نیست) |
strncmp | N کاراکتر اول رشته را مقایسه می کند (حساس به حروف بزرگ و کوچک است) |
strncmpi | N کاراکتر اول رشته را مقایسه می کند (حساس به حروف بزرگ و کوچک نیست) |
توابع مربوط به تغییر رشته به حروف بزرگ یا کوچک، ایجاد یا حذف فضای خالی | |
deblank | فضاهای خالی انتهای رشته را حذف می کند |
strtrim | فضاهای خالی انتها و ابتدای رشته را حذف می کند |
lower | کاراکترهای رشته را به حروف کوچک تبدیل می کند |
upper | کاراکترهای رشته را به حروف بزرگ تبدیل می کند |
strjust | آرایه کاراکتری را Justify می کند |
مثال ها
در ادامه برای برخی از توابع گفته شده در جدول بالا، مثال هایی قرار داده ایم که تا نحوه عملکرد آن ها را مشاهده کنید.
قالب بندی رشته ها
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 | A = pi*1000*ones(1,5); sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A) |
خروجی:
1 2 3 4 5 | ans = 3141.592654 3141.59 +3141.59 3141.59 000003141.59 |
پیوند دادن رشته ها
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 6 7 8 | %cell array of strings str_array = {'red','blue','green', 'yellow', 'orange'}; % Join strings in cell array into single string str1 = strjoin(str_array, "-") str2 = strjoin(str_array, ",") |
خروجی:
1 2 | str1 = red-blue-green-yellow-orange str2 = red,blue,green,yellow,orange |
پیدا و جایگزین کردن رشته ها
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 6 7 8 9 10 11 12 | students = {'Zara Ali', 'Neha Bhatnagar', ... 'Monica Malik', 'Madhu Gautam', ... 'Madhu Sharma', 'Bhawna Sharma',... 'Nuha Ali', 'Reva Dutta', ... 'Sunaina Ali', 'Sofia Kabir'}; % The strrep function searches and replaces sub-string. new_student = strrep(students(8), 'Reva', 'Poulomi') % Display first names first_names = strtok(students) |
خروجی:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | new_student = { [1,1] = Poulomi Dutta } first_names = { [1,1] = Zara [1,2] = Neha [1,3] = Monica [1,4] = Madhu [1,5] = Madhu [1,6] = Bhawna [1,7] = Nuha [1,8] = Reva [1,9] = Sunaina [1,10] = Sofia } |
مقایسه رشته ها
یک فایل اسکریپتی ایجاد کرده و کد زیر را در آن بنویسید:
1 2 3 4 5 6 7 | str1 = 'This is test' str2 = 'This is text' if (strcmp(str1, str2)) sprintf('%s and %s are equal', str1, str2) else sprintf('%s and %s are not equal', str1, str2) end |
خروجی:
1 2 3 | str1 = This is test str2 = This is text ans = This is test and This is text are not equal |
هیچ نظری ثبت نشده است