32
وش ن ر ذ هدی آ مhttp://azarnoosh.mshdiau.ac.ir م: ش ش ث ح ب م ها ه ت ش ها و ر ه ی رآ آ س ح ر گ ب ا ی گ’ ل آ ت’ ی ور ی م

مبحث ششم: آرایه ها و رشته ها

  • Upload
    edythe

  • View
    39

  • Download
    1

Embed Size (px)

DESCRIPTION

حسابگری الگوریتمی. مبحث ششم: آرایه ها و رشته ها. فهرست مطالب. تعاریف اولیه مثال هایی از آرایه های یک بعدی آرايه هاي يک بعدی به عنوان آرگومان تابع روش های مرتب سازی و جستجوی آرایه ها آرایه های دوبعدی رشته ها عملیات رشته ها. آرایه. آرايه: مجموعه اي از عناصر همنوع نام ديگر: ليست - PowerPoint PPT Presentation

Citation preview

Page 1: مبحث ششم:    آرایه  ها و رشته ها

مهدی آذرنوش

http://azarnoosh.mshdiau.ac.ir

مبحث ششم: آرایه ها و رشته ها

یموریت

گی ال

رگساب

ح

Page 2: مبحث ششم:    آرایه  ها و رشته ها

2

آرایه ها و رشت

ه ها

Lecture_6

فهرست مطالب

تعاریف اولیه •مثال هایی از آرایه های یک بعدی •آرايه هاي يک بعدی به عنوان آرگومان تابع •روش های مرتب سازی و جستجوی آرایه ها•آرایه های دوبعدی•رشته ها•عملیات رشته ها•

Page 3: مبحث ششم:    آرایه  ها و رشته ها

3

تعاریفا ولیه

Lecture_6

آرایه

آرايه: مجموعه اي از عناصر همنوع •نام ديگر: ليست –

نامگذاري آرايه: مانند متغير معمولی •

نحوة دسترسي به عناصر آرايه: استفاده از •متغيري به نام انديس

Page 4: مبحث ششم:    آرایه  ها و رشته ها

4

تعاریفا ولیه

Lecture_6

آرايه هاي يک بعدي

دستيابي به عناصر آرايه: با يک انديس•

الگوي تعريف:•• نام آرايه ]طول آرايه[نوع آرايه

++Cنوع آرايه: يکي از انواع •نام آرايه: نامگذاري متغيرها•انديس آرايه از صفر شروع مي شود.•

Page 5: مبحث ششم:    آرایه  ها و رشته ها

5

تعاریفا ولیه

Lecture_6

آرايه هاي يک بعدي

ذخيره عناصر آرايه در حافظه بصورت متوالي•

ميزان حافظه اختصاصي به آرايه )برحسب بايت(:• = )طول نوع آرايه( * طول آرايهميزان حافظه آرايه•

int x[6];

x[0] x[1] x[2] x[3] x[4] x[5]

Page 6: مبحث ششم:    آرایه  ها و رشته ها

6

تعاریفا ولیه

Lecture_6

مقدار اوليه آرايه

)(( mainمقدار اوليه عناصر آرايه عمومي )خارج از •صفر است.

مقدار اوليه عناصر آرايه محلي تعريف نشده است.•

الگوي مقدار اوليه دادن به آرايه ها:•• ;نوع آرايه نام آرايه ]طول[ = }مقادير{

int x[5]={1,2,3,4,5};

int p[ ]={1,3,5,7,9};

int x[10]={1,2,3};

Page 7: مبحث ششم:    آرایه  ها و رشته ها

7

مثال هاییا زآ رایه هایی کب عدی

Lecture_6

: تعيين بيشترين معدل و 1-6مثال محل آن

Example 6-1:#include <iostream.h>int main() { const int n = 10; float ave[n], amax = 0; int i, p; for(i = 0; i < n; i++){ cout << " enter an average: "; cin >> ave[i]; } amax = ave[0]; p = 0; for(i = 1; i < n; i++) if(ave[i] > amax) {

amax = ave[i];p = i;

} cout << "\n max = " << amax << " position = " << p+1; return 0;}

enter an average: 10.5 enter an average: 17.25 enter an average: 14 enter an average: 19.25 enter an average: 15.5 enter an average: 12.75 enter an average: 14.75 enter an average: 17.25 enter an average: 18.5 enter an average: 12.5

max = 19.25 position = 4

Page 8: مبحث ششم:    آرایه  ها و رشته ها

8

مثال هاییا زآ رایه هایی کب عدی

Lecture_6

: تعيين اعداد ورودي مثبت و 2-6مثال منفي و تعداد آنها

Example 6_2:#include <iostream.h>int main() { const int n = 10; int arr[n], i, c1 = 0, c2 = 0 ; cout << "\n Enter " << n << " numbers:\n"; for(i = 0; i < n; i++) cin >> arr[i]; cout << "\n negatives are: "; for(i = 0 ; i < n ; i++) if(arr[i] < 0){

cout << arr[i] << " ";c1++; } //end of if

cout << "\n positives are: "; for(i = 0 ; i < n ; i++) if(arr[i] > 0){

cout << arr[i] << " "; c2++; }//end of if

cout << "\n number of negative = " << c1; cout << "\n number of positive = " << c2; return 0; {

Enter 10 numbers:12-12450-2-04-910

negatives are: -12 -2 -9 positives are: 12 4 5 4 10 number of negative = 3 number of positive = 5

Page 9: مبحث ششم:    آرایه  ها و رشته ها

9

آرايه هايي کب عدیب ه عنوانآ رگومانت ابع

Lecture_6

تعریفتعريف پارامترها در توابع داراي آرگومان آرايه:•

آرايه با طول مشخص–آرايه با طول نامشخص )که بهتر است طول –

توسط آرگومان ديگر منتقل شود(اشاره گر )فصل بعد(–

void func1 (int x[]);void func2 (int x[], int

len);void main() {

int x[10];…func1 (x);…func2 (x,10);

}void func1 (int x[10]) {

…}void func2 (int x[], int

len) {…

}

Page 10: مبحث ششم:    آرایه  ها و رشته ها

10

آرايه هايي کب عدیب ه عنوانآ رگومانت ابع

Lecture_6

: تعيين نمره ای که بيش از 3-6مثال Eهمه تکرار شده ٍxample 6-3:

#include <iostream.h>void findt(float arr[], int k);int main() { const int k = 10; float arr[k] ; int i; cout << "\nEnter " << k << " mean :\n"; for (i = 0; i < k; i++) cin >> arr[i]; findt(arr, k); return 0; }//*************************void findt(float arr[], int k) { int max_count = -1 ; float max_value; int i, j , current_count; float current_value ; for (i = 0; i < k; i ++){

current_value = arr[i] ; current_count = 0 ; for(j = 0; j < k; j++)

if (arr[j] == current_value) current_count++ ;

if (current_count > max_count) { max_count = current_count ; max_value = current_value ; } }

cout << "\n maximum iteration of ave "; cout << max_value << " is "<< max_count; }

Enter 10 mean :12.517.251413.517.2518.7512.514.2515.7517.25

maximum iteration of ave 17.25 is 3

Page 11: مبحث ششم:    آرایه  ها و رشته ها

11

روش های مرتب سازی و جستجویآ رایه ها

Lecture_6

مرتب سازي آرايه هاx[0] < x[1] < x[2] < … < x[n]مرتب سازي صعودي•x[0] > x[1] > x[2] > … > x[n]مرتب سازي نزولي •

مرتب سازي حبابي•سهولت درک برنامه نويسي–کارآيي کمتر نسبت به ساير روشها–مقايسه عناصر با يکديگر و جابجايي آنها–

بر اساس نوع مرتب سازيnبراي آرايه اي به طول –

•n-1بار مقايسه در يک مرحله •n-1.مرحله براي مقايسه داريم

آرايه اي به 6 1 9 3 4 5طول

مرحله اول 4 3 9 1 6 x[0]

x[1] 4 9 3 1 6 x[1]

x[2] 4 9 3 1 6 x[2]

x[3] 4 9 3 6 1 x[3]

x[4] مرحله دوم

9 4 3 6 1 x[0] x[1]

9 4 3 6 1 x[1] x[2]

9 4 6 3 1 x[2] x[3]

9 4 6 3 1 x[3] x[4]

مرحله سوم 9 4 6 3 1 x[0]

x[1] 9 6 4 3 1 x[1]

x[2] 9 6 4 3 1 x[2]

x[3] بعد از اين ديگر تغييري

نداريم.

Page 12: مبحث ششم:    آرایه  ها و رشته ها

12

روش های مرتب سازی و جستجویآ رایه ها

Lecture_6

: مرتب سازي حبابي تعدادي 4-6مثال عدد

Example 6-4:#include <iostream.h>void ginput(int [], int);void bubble(int [], int);void goutput(int [], int);int main() {

const int k=7 ;int temp[7];ginput(temp, k);bubble (temp, k);cout << “\nThe sorted data are :\n ";goutput(temp, k);return 0; }

void ginput(int temp[], int len) {int i;for (i=0; i<len; i++) {

cout << "enter number " << (i+1) << " : ";cin >> temp[i]; } }

void bubble(int temp[], int len) {int i, j, item;for(i = len - 1 ; i > 0; i --)for(j = 0; j < i ; j++) if(temp[j] > temp[j + 1]) {

item = temp[j] ; temp[j] = temp[j + 1]; temp[j + 1] = item ; } }

void goutput(int temp[], int len) { int i; for(i=0 ; i < len; i++)

cout << temp[i]; << “ ”; }

enter number 1: 12enter number 2: 14enter number 3: 178enter number 4: 43enter number 5: 2124enter number 6: 213enter number 7: 92

The sorted data are :12 14 43 93 178

213 2124

Page 13: مبحث ششم:    آرایه  ها و رشته ها

13

روش های مرتب سازی و جستجویآ رایه ها

Lecture_6

جستجو در آرايهروش ترتيبي:•

مقايسه عنصر مورد نظر با هريک از عناصر آرايه–اتمام جستجو:–

يافتن عنصر مورد نظر•اتمام عناصر آرايه•

روش دودويي:•آرايه بايد مرتب باشد.–ابتدا با عنصر وسط مقايسه مي شود در صورت –

عدم تساوياگر بزرگتر بود با عناصر بااليي آرايه مقايسه مي شود.•اگر کوچکتر بود با عناصر پاييني آرايه مقايسه مي شود.•

ادامة جستجو تا يافتن عنصر يا اتمام آرايه–

Page 14: مبحث ششم:    آرایه  ها و رشته ها

14

روش های مرتب سازی و جستجویآ رایه ها

Lecture_6

: جستجويي ترتيبي در شماره 5-6مثال دانشجويي

Example 6-5:#include <iostream.h>void ginput(int [], int);int lsearch(int [], int, int);int main() { const int k = 5 ; int st[k], no; ginput(st, k); cout << "\nEnter a student # to search: "; cin >> no; if(lsearch(st, k, no) == -1) cout << "\n number " << no << " does not exist in list "; else cout << "\n number " << no << " exists in list."; return 0; }//**************************void ginput(int st[], int len) { int i; for(i = 0; i < len; i++) { cout << "enter student number " << i+1 << " : "; cin >> st[i]; } }//**********************int lsearch(int st[], int len, int no) { int i; for(i = 0; i < len; i++) if(st[i] == no) return i; return -1; }

enter student number 1 : 121

enter student number 2 : 134

enter student number 3 : 215

enter student number 4 : 219

enter student number 5 : 123

Enter a student # to search: 215

Number 215 exists in list.

Page 15: مبحث ششم:    آرایه  ها و رشته ها

15

روش های مرتب سازی و جستجویآ رایه ها

Lecture_6

: جستجويي دودويي در شماره 6-6مثال دانشجويي

Example 6-6:#include <iostream.h>void ginput(int [], int);void bubble(int [], int);int bsearch(int [], int, int);int main() { const int k = 5 ; int st[k], no; ginput(st, k); cout << "\nEnter a student # to search:"; cin >> no; bubble(st, k); if(bsearch(st, k, no) == -1) cout << "\n number " << no << " does not exist in list "; else cout << "\n number " << no << " exists in list."; return 0; }//**********************int bsearch(int st[], int len, int no) { int mid, low = 0, high = len - 1; while(low <= high){ mid = (low + high) / 2; if(no < st[mid])

high = mid - 1; else if(no > st[mid])

low = mid + 1; else return mid; } return -1; }

enter student number 1 : 121

enter student number 2 : 134

enter student number 3 : 215

enter student number 4 : 219

enter student number 5 : 123

Enter a student # to search: 215

Number 215 exists in list.

Page 16: مبحث ششم:    آرایه  ها و رشته ها

16

آرایه هاید وب عدی

Lecture_6

تعریف آرايه دو بعديدستيابي به عناصر : با دو انديس سطر و ستون•الگوي تعريف:•

• [2[ ]بعد 1 نام آرايه ]بعد نوع آرايهبعد اول: تعداد سطر–بعد دوم: تعداد ستون–شروع هر انديس از صفر–

نحوة ذخيره در حافظه : سطري•

y[0][0] y[0][1] y[0][2] y[0][3]y[1][0] y[1][1] y[1][2] y[1][3]y[2][0] y[2][1] y[2][2] y[2][3]

y[0][0] y[1][0] y[2][0]

Page 17: مبحث ششم:    آرایه  ها و رشته ها

17

آرایه هاید وب عدی

Lecture_6

مقدار اوليه آرايه چند بعدی

الگوي مقدار اوليه دادن به آرايه های چند بعدی:•• [ ]…[ = 2[ ]بعد 1 نام آرايه ]بعد نوع آرايه

;}مقادير{int y[2][3]={1,2,3,4,5,6};

int y[2][3]={{1,2,3},{4,5,6}};

int m[3][2][4]={{{1,2,3,4},{5,6,7,8}}, {{7,9,3,2},{4,6,8,3}}, {{7,2,6,3},{0,1,9,4}}};

Page 18: مبحث ششم:    آرایه  ها و رشته ها

18

آرایه هاید وب عدی

Lecture_6

: جدول ضرب7-6مثال Example 6-7:#include <iostream.h>int main() { int table[10][10], i, j ; for(i = 0; i < 10; i++)

for(j = 0; j < 10; j++) table[i][j] = (i + 1)*(j + 1) ;

for(i = 0; i < 10; i++) { for(j = 0; j < 10; j++) cout << table[i][j] << " " ; cout << endl ;

} return 0;}

1 2 3 4 5 6 7 8 9 102 4 6 8 10 12 14 16 18

20……9 18 27 36 45 54 63 72

81 9010 20 30 40 50 60 70 80

90 100

Page 19: مبحث ششم:    آرایه  ها و رشته ها

19

آرایه هاید وب عدی

Lecture_6

آرايه هاي دو بعدی به عنوان آرگومان تابع

تعريف پارامترها در توابع داراي آرگومان آرايه •دو بعدي:

آرايه با طول مشخص–آرايه با طول نامشخص )طول سطر توسط –

آرگومان ديگر منتقل شود(اشاره گر )فصل بعد(–

void f1 (int x[5][10]);void f2 (int x[][10], int

row);void main() {

int x[5][10];…f1 (x);…f2 (x,5);

}void f1 (int x[5][10]) {

…}void func2 (int x[][10],

int row) {…

}

Page 20: مبحث ششم:    آرایه  ها و رشته ها

20

آرایه هاید وب عدی

Lecture_6

: يافتن بزرگترين عنصر هر 8-6مثال سطر ماتريس

Example 6-8:#include <iostream.h>void minput(int [][2], int);void mcal(int mat[][2], int);void main() { const int r = 3, c = 2; int mat[r][c]; minput(mat, r); mcal(mat, r); }//*********************void minput(int mat[][2], int r) { int i, j; for(i = 0; i < r; i++) for(j = 0; j < 2; j++) {

cout << "enter mat[" << i << "][" << j << "]: ";cin >> mat[i][j]; } }

//**********************void mcal(int mat[][2], int r) { int i, j, rmax; cout << " ROW \t\tMAX"; cout << "\n-------------------"; for(i = 0; i < r; i ++) { rmax = mat[i][0]; for(j = 1; j < 2; j++) if(mat[i][j] > rmax)

rmax = mat[i][j]; cout << "\n " << i+1 << " \t\t " << rmax; } }

enter mat[0][0]: 126enter mat[0][1]: 112enter mat[1][0]: 312enter mat[1][1]: 152enter mat[2][0]: 112enter mat[2][1]: 424 ROW

MAX----------------------------

--- 1

126 2

312 3

424

Page 21: مبحث ششم:    آرایه  ها و رشته ها

21

آرایه هاید وب عدی

Lecture_6

ماتريس2: محاسبة حاصلضرب 9-6مثال Example 6-9:#include <iostream.h>int main() { int mat1[2][3], mat2[3][4], mat3[2][4]={0} ; int i,j,k,l ; //read mat1 for(i=0 ; i<2 ; i++) for(j=0 ; j<3 ;j++) {

cout << "enter mat1[" << i << "][" << j << "]: ";cin >> mat1[i][j]; }

//read mat2 for(i=0 ; i<3 ; i++) for(j=0 ; j<4 ;j++) {

cout << "enter mat2[" << i << "][" << j << "]: ";cin >> mat2[i][j]; }

//multiply mat1 by mat2 for(i=0 ; i<2 ; i++)

for(j=0 ; j<4 ;j++) { mat3[i][j]=0 ; for(k=0 ;k<3 ; k++) mat3[i][j] = mat3[i][j]+mat1[i][k]*mat2[k][j]; }

cout << "\n the product of mat1 & mat2 " ; cout << " is :\n\n" ; for(i=0 ;i<2 ;i++) { for(j=0 ; j<4 ;j++)

cout << mat3[i][j] << “\t"; cout << "\n" ; } return 0; }

enter mat1[0][0]: 1enter mat1[0][1]: -1enter mat1[0][2]: 2enter mat1[1][0]: 0enter mat1[1][1]: 0enter mat1[1][2]: -2enter mat2[0][0]: 1 enter mat2[0][1]: 2enter mat2[0][2]: -1enter mat2[0][3]: -2enter mat2[1][0]: 2enter mat2[1][1]: 1enter mat2[1][2]: 0enter mat2[1][3]: -3enter mat2[2][0]: 1enter mat2[2][1]: -1enter mat2[2][2]: -1enter mat2[2][3]: 1

the product of mat1 & mat2 is :

-1 1 3-3

-2 2 2-2

Page 22: مبحث ششم:    آرایه  ها و رشته ها

22

آرایه هاید وب عدی

Lecture_6

: يافتن کوچکترين عنصر آرايه10-6مثال

Example 6-10:#include <iostream.h>int findmin(int [], int);void main() { int list[20], num, size=0 ; do{ cout << "type list[" << size << "] : "; cin >> list[size]; } while(list[size ++] != 0) ; size --; num = findmin(list, size) ; cout << "\n minimum is: " << num; }//***********************int findmin(int arr[], int size) { int i, min1 ; min1 = arr[0] ; for(i = 0 ; i < size; i++)

if(arr[i] < min1) min1 = arr[i] ;

return(min1) ; }

type list[0] : 27type list[0] : 41type list[0] : 15type list[0] : 34type list[0] : 32type list[0] : 61type list[0] : 123type list[0] : 0

minimum is: 15

Page 23: مبحث ششم:    آرایه  ها و رشته ها

23

رشته ها

Lecture_6

تعریفآرايه اي از کاراکترها•NULL (‘\0’)تعيين انتهاي رشته با کاراکتر •الگوي تعريف:••char s[20];مقدار اولية رشته:•

رشته داخل کوتشين قرار گرفته به متغير نسبت داده شود. –هريک از کاراکترهاي رشته اي جداگانه اختصاص يابد. )تهي را نيز –

بايد تعيين نمود(

char s1[ ] = “Programming”;

p r o g r a m m i n g \0

char s2[12] = “Computer”;char s3[ ] = { ‘C’ , ‘+’ , ‘+’ , ‘\0’};

C o m p u t e r \0 ? ? ? C + + \0

Page 24: مبحث ششم:    آرایه  ها و رشته ها

24

رشته ها

Lecture_6

ورودي و خروجي رشته ها

cout و cinاستفاده از • است.cin) ( که عضو getاستفاده از تابع •الگوي استفاده:•

• cin.get (نام رشته, طول رشته)• cin.get (نام رشته, طول رشته, ‘جداکننده’)

مشخص کنندة انتهاي جمله است.enterدر دستور اول –در دستور دوم کاراکتر تعيين شده مشخص کنندة انتهاي –

جمله است.

امکانات: با اين دستور رشته مي تواند شامل فاصله • نيز باشد.Tabو

Page 25: مبحث ششم:    آرایه  ها و رشته ها

25

رشته ها

Lecture_6

: تبديل حروف کوچک يک 11-6مثال رشته به بزرگ

Example 6-11:#include <iostream.h>void upper(char []);void main() { char s[21]; cout << “Enter a string: "; cin.get(s,20); upper(s); cout << “\nResult is: " << s; }//***********************void upper(char s[]) { int i; for(i = 0; s[i]; i++) if(s[i] >= 'a' && s[i] <= 'z')

s[i] -= 32; }

Enter a string: changing characters to upper case

Result is : CHANGING CHARACTERS

Page 26: مبحث ششم:    آرایه  ها و رشته ها

26

رشته ها

Lecture_6

: تبديل يک کاراکتر به کاراکتر ديگر 12-6مثال در يک رشته

//Example 6-12:#include <iostream.h>#include <conio.h>void replace(char [], char, char);void main() {

char string[50] ; char source_letter, target_letter ; int i ; cout << "\nEnter a string: "; cin.get(string,50) ; cout << "Enter source character: "; source_letter = getche() ; cout << "\nEnter target character: "; target_letter = getche() ; replace(string, source_letter, target_letter); cout << "\nThe result string is: "; cout << string ; }

//************************void replace(char string[], char source_letter, char target_letter){

int i; if(source_letter != target_letter)

for(i = 0 ; string[i] ; i++)if(string[i] == source_letter)

string[i] = target_letter; }

Enter a string: changing one character of a string

Enter source character: aEnter target character: eThe result string is: chenging one cherecter

of e string

Page 27: مبحث ششم:    آرایه  ها و رشته ها

27

رشته ها

Lecture_6

: تعويض محتويات دو رشته با 13-6مثال يکديگر

Example 6-13:#include <iostream.h>void main() {

char s1[81], s2[81], temp;int i, j;cout << "enter string <s1> : " ;cin.get(s1,81); cin.get();cout << "enter string <s2> : " ;cin.get(s2,81); for(i = 0; s1[i] && s2[i]; i++) {

temp = s1[i] ;s1[i] = s2[i] ;s2[i] = temp ; }

if(s1[i]) { //s1 has more charj = i ;while(s1[i])

s2[i] = s1[i++] ;s2[i]='\0' ;s1[j]='\0' ; }//end of if

else if (s2[i]) { //s2 has more charj = i ;while(s2[i])

s1[i] = s2[i++] ;s2[j]='\0' ;s1[i]='\0' ; } //end of else if

cout << “\nnew content of s1 is: " << s1;cout << “\nnew content of s2 is: " << s2; }

enter string <s1> : Computer programming

enter string <s2> : C++

new content of s1 is: C++new content of s2 is: Computer

programming

Page 28: مبحث ششم:    آرایه  ها و رشته ها

28

رشته ها

Lecture_6

: تعيين عملگر و عملوندها در عبارت 14-6مثال محاسباتي

Example 6-14:#include <iostream.h>void separate(char exp[], char oper[], int opnd[]);void main() {

char expr[21], oper[21];int opnd[21];cout << "enter expression: ";cin.get (expr,21);separate(expr, oper, opnd); }

//***************void separate(char expr[], char oper[], int opnd[]) { int i, j = 0 , k = 0; for(i = 0; expr[i]; i ++)

if(expr[i] >= '0' && expr[i] <= '9')opnd[j ++] = expr[i] - 48;

elseoper[k ++] = expr[i];

oper[k] = '\0';cout << "operators are: “ << oper << endl;cout << "operands are: ";for(i = 0; i < j; i ++)

cout << opnd[i] << " "; }

enter expression: 2 * 4 / 3 - 4 + 2

operators are: * / - +operands are: 2 4 3 4 2

Page 29: مبحث ششم:    آرایه  ها و رشته ها

29

عملیات رشته ها

Lecture_6

انتساب رشته ها

انتساب رشته ها به صورت معمول صحيح •نيست:

• s2 = s1;• s = “Computer”;

روش صحيح:•• strcpy (str1, str2);

string.hفايل سرآيند مربوطه: •

str1 بيشتر از طول str2در صورتيکه طول • ذخيره مي شود.str1باشد در حافظه در ادامة

Page 30: مبحث ششم:    آرایه  ها و رشته ها

30

عملیات رشته ها

Lecture_6

مقايسه رشته ها

مقايسه رشته ها به صورت معمول نيست:•• s1 == s2

روش صحيح:•• strcmp(s1,s2)

string.hفايل سرآيند مربوطه: •خروجي تابع:•

عدد صفر: دو رشته با هم مساوي هستند.– s1 < s2عدد منفي: –s1 > s2عدد مثبت: –

Page 31: مبحث ششم:    آرایه  ها و رشته ها

31

عملیات رشته ها

Lecture_6

الحاق دو رشته

الگوي استفاده:•• strcat(s1, s2);

string.hفايل سرآيند مربوطه: •

قرار مي گيرد.s1 در انتهاي رشتة s2رشتة •

Page 32: مبحث ششم:    آرایه  ها و رشته ها

32

عملیات رشته ها

Lecture_6

: جستجوي يک نام در يک 16-6مثال ليست

Example 6-16:#include <iostream.h>#include <string.h>void bubble(char [][21], int);int bsearch(char [][21], char [], int);void main() { const int n = 5; int i; char name[21], arr [n][21]; for(i = 0; i < n; i ++){ cout << "Enter name " << (i + 1) << " : " ; cin.get(arr[i], 20); cin.get(); } bubble(arr, n); cout << "Enter one name for search :" ; cin.get(name, 20) ; if(bsearch(arr, name, n) == -1) cout << "Name " << name << " does not exist in table." ; else cout << "Name " << name << " exists in table." ; }//********************void bubble(char arr[5][21], int n) { int i, j; char temp[21]; for(i = n - 1; i > 0; i --) for(j = 0; j < i; j++) if(strcmp(arr[j], arr[j + 1]) > 0){

strcpy(temp, arr[j]); strcpy(arr[j], arr[j + 1]); strcpy(arr[j + 1], temp); } }//*******************int bsearch(char arr[5][21], char name[21], int n) { int mid, low = 0, high = n - 1; while(low <= high){

mid = (low + high) / 2; if(strcmp(name, arr[mid]) < 0) high = mid - 1; else if(strcmp(name, arr[mid]) > 0) low = mid + 1; else return mid; } return -1; }

Enter name1 : AliEnter name 2 : MohammadEnter name 3 : HusseinEnter name 4 : MahdiEnter name 5 : HassnEnter one name for search :

JavadName Javad does not exist in

table.