1. Trang chủ
  2. » Cao đẳng - Đại học

TÀI LIÊU VỀ MẢNG - XÂU KÍ TỰ

12 840 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 167 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lưu ý: số phần tử trong câu khai báo mảng phải là một hằng số hoặc một biểu thức của các hằng số.

Trang 1

L ươ ng Trn Hy Hi ế n

 M ả ng

 khai báo

 c ấ u trúc, thao tác

2

 Xâu ký t ự

 t ạ o xâu, nh ậ p, xu ấ t

 m ộ t s ố hàm xâu

 M ộ t s ố thu ậ t toán s ắ p x ế p và tìm ki ế m

 Công d ụ ng

 Dùng để l ư u các đố i t ượ ng có cùng chung m ộ t ki ể u và

ý ngh ĩ a s ử d ụ ng

Phân lo i

3

 Phân lo ạ i

 M ả ng 1 chi ề u

 M ả ng 2 chi ề u

 Khai báo

 Cách s ử d ụ ng

 Các thao tác c ơ b ả n trên m ả ng

 T ậ p các ph ầ n t ử thu ộ c cùng m ộ t ki ể u d ữ li ệ u

 Đượ c s ắ p x ế p liên t ụ c trong b ộ nh ớ

 kích th ướ c là c ố đị nh

 Có th ể đ ánh ch ỉ s ố và truy c ậ p theo th ứ t ự ng ẫ u

4

 Có th ể đ ánh ch ỉ s ố và truy c ậ p theo th ứ t ự ng ẫ u nhiên

 C/C++: ch ỉ s ố luôn b ắ t đầ u t ừ 0

 Phân lo ạ i:

 M ả ng 1 chi ề u

 M ả ng 2 chi ề u

 M ả ng n chi ề u

Trang 2

M ả ng (3)

 Khai báo m ả ng:

 Mảng 1 chiều:

Kiu Tên-mng[s phn tử];

 Ý nghĩa: <Tên-mảng> là một

mảng có <số phần tử> kiểu

0 1 … SPT-2 SPT-1

5

mảng có <số phần tử> kiểu

<Kiểu> Phần tửđầu tiên nằm

ở vị trí thứ 0 Phần tử cuối

cùng nằm ở vị trí <số phần

tử> - 1

 Lưu ý: số phần tử trong câu

khai báo mảng phải là một

hằng số hoặc một biểu thức

của các hằng số

•Ví dụ:

•int A[10];// mảng A có 10

phần tử kiểu nguyên

•double mangthuc[100];mảng mangthuc có 100 phần tử kiểu

thực

•const int MAX = 100;

double mangthuc[MAX];

Ví d ụ

void main() {

int c[12];

6

for (int i=0; i<12; i++) { cin >> c[i];

} }

7

void main() {

int a[12];

int b[] = {2, 3, 5, 7};

8

t b[] { , 3, 5, };

int c[5] = {2, 4, 8, 16};

int d[2] = {1, 2, 3}; // compile error int m[5], i;

… }

Trang 3

Kích th ướ c m ả ng không c ầ n bi ế t tr ướ c

void main()

{

int n, max = 0;

cin >> n;

int a[n];

9

int a[n];

for (int i=0; i<n; i++) {

cin >> a[i];

if (a[max] < a[i]) max = i;

}

if (n > 0)

cout << "max number = " << a[max];

}

 Có th ể truy ề n m ả ng là tham s ố cho m ộ t hàm

 Nh ư là tham chi ế u (nh ậ n s ự thay đổ i)

 Hàm c ầ n ph ả i bi ế t kích th ướ c c ủ a m ả ng

10

 thông qua m ộ t tham s ố ph ụ

 thông qua giá tr ị k ế t thúc m ả ng

void arrayCopy( int a[], int b[] , int size)

{

for (int i=0; i<size; i++)

b[i] [i]

11

b[i] = a[i];

}

M ả ng 1 chi ề u

 Các thao tác th ườ ng g ặ p trên m ả ng m ộ t chi ề u:

 Qui ước mảng:

 int A[100]; // mảng có thể chứa tối đa 100 phần tử

 int n; // số phần tử thật sự sẽ sử dụng

Các thao tác trên mảng một chiều th ờng đi kèm với một vòng

12

 Các thao tác trên mảng một chiều thường đi kèm với một vòng for

 Nhp mt dãy (gi sửđã nhp n)

for (int i = 0 ; i < n ; i++) {

cout << “Nh ậ p vào ph ầ n t ử th ứ “ << i << “ c ủ a m ả ng: “; cin >> A[i];

}

Trang 4

M ả ng 1 chi ề u

 Bài toán: Tìm v ị trí X trên m ả ng a đ ang có N

thành ph ầ n.

 Gi ả i pháp: Tìm tu ầ n t ự

13

int linearSearch(int, int [], int);

void main() {

int a[100], key;

… cin >> key;

cout << linearSearch(key a 100);

14

cout << linearSearch(key, a, 100);

} int linearSearch(int k, int m[], int size) {

for (int i=0; i< size; i++) {

if (k == m[i]) return i;

} return -1;

}

M ả ng 1 chi ề u

 Xu ấ t dãy

// đị nh d ạ ng độ r ộ ng để xu ấ t #include<iomanip>

for (int i = 0 ; i < n ; i++)

cout << setw(6)<<A[i];

15

 Thêm m ộ t ph ầ n t ử v vào cu ố i dãy

A[n++] = v;

 Thêm m ộ t ph ầ n t ử v vào đầ u dãy

for (int i = n ; i > 0 ; i )

A[i] = A[i-1];

A[0] = v;

n++;

0

Thêm 15 vào (a, 7)

16

15

12

N = 7

a[N] = X;

N ++; X

Trang 5

M ả ng 1 chi ề u

 Thêm m ộ t ph ầ n t ử v vào v ị trí th ứ k c ủ a dãy

for (int i = n ; i > k ; i )

A[i] = A[i-1];

17

A[i] = A[i-1];

A[k] = v;

n++;

 Xóa ph ầ n t ử n ằ m t ạ i v ị trí th ứ k c ủ a dãy

n ;

for (int i = k ; i < n ; i++)

A[i] = A[i+1];

S ắ p x ế p dãy theo th ứ t ự t ă ng d ầ n:

 Interchange Sort

for (int i = 0 ; i < (n – 1) ; i++) {

23

{ for (int j = i + 1 ; j < n ; j++)

if (A[j] < A[i]) {

int temp = A[j];

A[j] = A[i];

A[i] = temp;

} }

 Tìm Min

int min = A[0];

for (int i = 1 ; i < n ; i++)

if (A[i] < min)

min = A[i];

24

min = A[i];

cout << “Ph ầ n t ử nh ỏ nh ấ t là: “ << min;

 Tìm Max

int max = A[0];

for (int i = 1 ; i < n ; i++)

if (A[i] > max)

max = A[i];

cout << “Ph ầ n t ử l ớ n nh ấ t là: “ << max;

 Tính t ổ ng

int tong = 0;

for (int i = 0 ; i < n ; i++)

25

for (int i = 0 ; i < n ; i++) tong += A[i];

 Tính trung bình c ộ ng

int tong = 0;

for (int i = 0 ; i < n ; i++) tong += A[i];

double TBC = tong * 1.0 / n;

Trang 6

 Đả o ng ượ c dãy

for (int i = 0 ; i < n / 2; i++)

{

26

{

int temp = A[i];

A[i] = A[n – i – 1];

A[n – i – 1] = temp;

}

Bài t ậ p

 Vi ế t các hàm tính giá tr ị l ớ n nh ấ t, giá tr ị nh ỏ nh ấ t, giá tr ị trung bình c ủ a m ộ t m ả ng s ố nguyên

27

M ả ng 2 chi ề u

 Khai báo m ả ng:

 Mảng 2 chiều:

Kiu Tên-mng[s dòng][ ố cột];

 Ý nghĩa: <Tên-mảng> là một ma

trận có <số dòng> dòng và <số

0 1 … SC-1

0

1

SD-1

28

trận có <số dòng> dòng và <số

cột> cột Phần tửđầu tiên nằm ở

vị trí dòng thứ 0, cột thứ 0 Phần

tử cuối cùng nằm ở vị trí dòng

<số dòng> - 1 và cột <số cột>

-1

 Lưu ý: số dòng, số cột phải là một

hằng số hoặc một biểu thức của

các hằng số

SD-1

•Ví dụ:

int A[10][5]; // ma trận

10 dòng, 5 cột

const int MAXX = 10;

const int MAXY = 5;

int A[MAXX][MAXY];

M ả ng 2 chi ề u

int a[7][7];

int b[2][3] = { {2, 4, 6}, {3, 5, 7} }; for (int i=0; i<2; i++){

29

{ for (int j=0; j<3; j++) cout << b [i][j]<<“\t” ; cout << endl;

}

 Bn cht là mng mt chiu

Trang 7

M ả ng 2 chi ề u

 Các thao tác th ườ ng g ặ p trên m ả ng hai chi ề u:

 Qui ước mảng:

 int A[100][100]; // mảng có thể chứa tối đa 100x100 phần tử

 int m, n; // số dòng và số cột thật sự sẽ sử dụng

 Các thao tác trên mảng hai chiều thường đi kèm với hai vòng for

Nhp mt dãy (gi sửđã nhp m, n)

30

 Nhp mt dãy (gi sửđã nhp m, n)

for (int i = 0 ; i < m ; i++)

{

for (int j = 0 ; j < n ; j++)

{

cout << “Nhập phần tử tại dòng “ << i << “ cột “ << j << “ của mảng: “;

cin >> A[i][j];

}

}

 Xu ấ t ma tr ậ n

//setw(6); // đị nh d ạ ng độ r ộ ng để xu ấ t

for (int i = 0 ; i < m ; i++)

31

for (int i = 0 ; i < m ; i++) {

for (int j = 0 ; j < n ; j++) cout << setw(6)<< A[i][j];

cout << endl;

}

 Thêm m ộ t dòng v vào cu ố i ma tr ậ n

for (int j = 0 ; j < n ; j++)

A[m][j] = v[j];

m++;

32

m++;

 Thêm m ộ t dòng v vào v ị trí dòng th ứ k

for (int i = m ; i > k ; i++)

{

for (int j = 0 ; j < n ; j++)

A[i][j] = A[i-1][j];

}

for (int j = 0 ; j < n ; j++)

A[k][j] = v[j];

m++;

 Xóa dòng th ứ k

m ;

for (int i = k ; i < m ; i++)

33

for (int i = k ; i < m ; i++) {

for (int j = 0 ; j < n ; j++) A[i][j] = A[i+1][j];

}

Trang 8

 Tìm ki ế m v ị trí ph ầ n t ử mang giá tr ị x

int dem = 0;

for (int i = 0 ; i < m ; i++)

{

34

{

for (int j = 0 ; j < n ; j++)

if (A[i][j] == x)

{

cout << “Vị trí dòng “ << i << “ cột “ << j << endl;

dem++;

}

}

if (dem == 0)

cout << “Phần tử ” << x << “ không có trong ma trận.”;

 M ả ng các ký t ự

char name[30];

char str[] = ”hello”;

35

 Trong C/C++ xâu k ế t thúc b ằ ng ký t ự \0

 kích th ướ c b ộ nh ớ và độ dài có ngh ĩ a là khác

nhau.

h e l l o \0 str

char first_name[5] = { 'J', 'o', 'h', 'n', '\0' };

char last_name[6] = "Minor";

char other[] = "Tony Blurt";

Chu ỗ i ký t ự - Ví d ụ

36

char characters[7] = "No null";

first_name

last_name

other

characters

'J' 'o' 'h' 'n' 0 'M' 'i' 'n' 'o' 'r' 0 'T' 'o' ‘n’ 'y' 32 'B' 'l' 'u' 'r' 't' 0 'N' 'o' 32 'n' 'u' 'l' 'l' 0

L ư u ý: k ế t thúc chu ỗ i

#include <iostream>

using namespace std;

int main() {

char other[] = "Tony Blurt";

cout<<other;

"Blurt" s không

được in ra

37

cout<<other;

other[4] = '\0';

cout<<other;

return 0;

}

Tony Blurt Tony

other 'T' 'o' ‘n’ 'y' 32 'B' 'l' 'u' 'r' 't' 0

Trang 9

Khai báo, nh ậ p/xu ấ t xâu

#include <iostream>

using namespace std;

#include <cstring>

void main()

{

38

{

char s1[] = ”Hello”;

char s2[] = ”What’s your name?”;

char name[30];

cout << s1 << endl << s2 << endl;

cin >> name;

cout << name << ”, welcome!”;

}

 V ề c ơ b ả n nh ư m ả ng

 Nh ư là tham s bi ế n

 Có ph ầ n t ử k ế t thúc xâu nên th ườ ng không c ầ n

39

truy ề n kích th ướ c

void stringCopy(char s1[], char s2[])

{

int i = 0;

while (s1[i] > 0) {

40

s2[i] = s1[i];

i++;

}

s2[i] = 0;

}

M ộ t s ố hàm th ư vi ệ n xâu

 S ử d ụ ng th ư vi ệ n cstring (th ư vi ệ n C++)

 #include <cstring>

 M ộ t s ố hàm

strlen (s) : tr ả l i kích th ớ c xâu s

41

 strlen (s) : tr ả l ạ i kích th ướ c xâu s

 strcpy (s1, s2) : copy s2 vào s1

 strcmp (s1, s2) : so sánh, n ế u b ằ ng thì k ế t qu ả là 0; có phân bi ệ t IN HOA – in th ườ ng

 stricmp (s1, s2) : so sánh, n ế u b ằ ng thì k ế t qu ả là 0; không phân bi ệ t IN HOA – in th ườ ng

 strupr (s): Đổi toàn bộ các ký tự của chuỗi thành IN HOA

 strlwr (s): Đổi toàn bộ các ký tự của chuỗi thành in thường

Trang 10

Chu ỗ i ký t ự – M ộ t s ố hàm th ư vi ệ n

 Gán n ộ i dung chu ỗ i:

o Chép toàn b chui source sang chui dest:

int strcpy(char *dest, const char

42

*src);

o Chép ti đ a n ký t t source sang dest:

int strncpy(char *dest,

const char *src, int n);

 T ạ o chu ỗ i m ớ i t ừ chu ỗ i đ ã có:

char *strdup(const char *src);

#include <iostream>

using namespace std;

int main() {

char s[] = "Tony Blurt";

Chu ỗ i ký t ự – ví d ụ strcpy

Tony Blurt To123Blurt Blurt

43

char s2[100], *s3;

strcpy(s2, s);

cout<<s2;

strncpy(s2 + 2, "12345", 3);

cout<<s2;

s3 = strdup(s + 5);

cout<<s2;

return 0;

}

Chu ỗ i ký t ự – M ộ t s ố hàm th ư vi ệ n

 N ố i chu ỗ i:

char *strcat(char *dest,

const char *src);

Tách chu ỗ i:

44

 Tách chu ỗ i:

char *strtok(char *s,

const char *sep);

Tr v ề đị a ch ca đ on đầ u tiên Mun tách

đ on k ế ti ế p tham s th nht s là NULL

#include <iostream>

#define SEPARATOR "., "

int main() {

Chu ỗ i ký t ự – ví d ụ strtok

Thu strtok: 9

123 45

45

{ char s[]= "Thu strtok: 9,123.45";

char *p;

p = strtok(s, SEPARATOR);

while (p != NULL) { cout<<p;

p = strtok(NULL, SEPARATOR);

} return 0;

}

45

Trang 11

Chu ỗ i ký t ự – M ộ t s ố hàm th ư vi ệ n

 Tìm m ộ t ký t ự trên chu ỗ i:

char *strchr(const char *s, int

c);

46

 Tìm m ộ t đ o ạ n ký t ự trên chu ỗ i:

char *strstr(const char *s1,

const char *s2);

#include <iostream>

using namespace std;

int main() {

Chu ỗ i ký t ự – ví d ụ tìm ki ế m

47

char s[]= "Thu tim kiem chuoi";

char *p;

p = strchr(s, 'm');

cout<<p;

p = strstr(s, "em");

cout<<p;

return 0;

}

m kiem chuoi

em chuoi

#include <iostream.h>

void StrIns(char *s, char *sub)

{

int len = strlen(sub);

Chu ỗ i ký t ự – chèn m ộ t đ o ạ n ký t ự

48

memmove(s + len, s, strlen(s)+1);

strncpy(s, sub, len);

}

int main()

{

char s[]= "Thu chen";

StrIns(s, "123"); cout<<s;

StrIns(s + 8, "45"); cout<<p;

return 0;

}

123 Thu chen

123 Thu 45chen

#include <iostream.h>

void StrDel(char *s, int n) {

memmove(s, s + n, strlen(s+n)+1);

Chu ỗ i ký t ự – xóa m ộ t đ o ạ n ký t ự

xoa 12345

49

memmove(s, s + n, strlen(s+n)+1);

} int main() {

char s[]= "Thu xoa 12345";

StrDel(s, 4); cout<<s;

StrDel(s + 4, 3); cout<<p;

return 0;

}

xoa 12345 xoa 45

Trang 12

M ả ng xâu

char names[100][30];

for (int i=0; i<100; i++) {

50

cin >> names[i];

cout << strlen(names[i]);

}

Bài t ậ p

 Vi ế t hàm t ạ o xâu ngh ị ch đả o: nh ậ n tham s ố là xâu, t ạ o xâu ngh ị ch đả o c ủ a chính xâu đ ó và ghi

k ế t qu ả vào chính xâu tham s ố vào.

Vi ế t hàm ki ể m tra m t xâu ký t có n ằ m trong

52

 Vi ế t hàm ki ể m tra m ộ t xâu ký t ự có n ằ m trong

m ộ t xâu ký t ự khác hay không.

 Thao tác thành th ạ o v ớ i m ả ng m ộ t chi ề u

 Cài đặ t các hàm s ắ p x ế p và tìm ki ế m

 Thao tác v ớ i xâu ký t ự

53

 nh ậ p xu ấ t, t ạ o h ằ ng xâu

 s ử d ụ ng các hàm th ư vi ệ n copy, so sánh,…

Ngày đăng: 22/12/2016, 13:25

🧩 Sản phẩm bạn có thể quan tâm

w