1. Trang chủ
  2. » Công Nghệ Thông Tin

Session 17 chuỗi – lý thuyết

13 403 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 13
Dung lượng 203,82 KB

Nội dung

Bài 17 Chuỗi Mục tiêu: Kết thúc học này, bạn có thể:  Giải thích biến kiểu chuỗi  Giải thích trỏ trỏ đến chuỗi  Thực thao tác nhập/xuất chuỗi  Giải thích hàm thao tác chuỗi  Giải thích cách thức truyền mảng vào hàm tham số  Mô tả cách thức sử dụng chuỗi tham số hàm Deleted: đối số Giới thiệu Các chuỗi C cài đặt mảng ký tự kết thúc ký tự NULL (‘\0’) Bài thảo luận công dụng thao tác chuỗi 17.1 Các biến kiểu chuỗi Các biến chuỗi sử dụng để lưu trữ chuỗi ký tự Như biến khác, biến phải khai báo trước sử dụng Ví dụ khai báo biến chuỗi: Deleted: Một câu khai báo biến chuỗi điển hình là:¶ char str[10]; str mảng ký tự lưu tối đa 10 ký tự Giả sử str gán chuỗi, Deleted: biến Deleted: giữ “WELL DONE” Một chuỗi dãy ký tự nằm dấu nháy kép Mỗi ký tự chuỗi lưu trữ phần tử mảng Trong nhớ, chuỗi lưu trữ sau: ‘W’ ‘E’ ‘L’ ‘L’ ‘’ ‘D’ ‘O’ ‘N’ ‘E’ ‘\0’ Ký tự ‘\0’ (null) tự động thêm vào cách biểu diễn bên chuỗi để đánh dấu điểm kết thúc chuỗi Vì vậy, khai báo chuỗi, phải tăng kích thước thêm phần tử để chứa kí hiệu kết thúc null 17.1.1 Con trỏ trỏ đến chuỗi Chuỗi lưu truy cập cách sử dụng trỏ kiểu ký tự Một trỏ kiểu ký tự trỏ đến chuỗi khai báo sau: char *pstr = “WELCOME”; pstr trỏ khởi tạo để trỏ đến chuỗi Con trỏ pstr thay đổi để trỏ đến chuỗi khác Mặc dù trỏ pstr trỏ đến chuỗi khác ta truy xuất đến chuỗi “WELCOME”được Chuỗi 237 Deleted: Ký tự ‘\0’ (null) tự động thêm vào cách biểu diễn bên chuỗi để chương trình định vị nơi kết thúc chuỗi Deleted: Vì vậy, khai báo biến chuỗi, nhớ dành phần tử trống cho ký hiệu kết thúc null.¶ Deleted: Khi đó, truy xuất đến chuỗi “WELCOME” mà pstr trỏ đến Formatted Deleted: pstr trỏ khởi tạo để trỏ đến chuỗi Con trỏ thay đổi để trỏ đến nơi khác Tuy nhiên, thay đổi làm cho chuỗi trở nên truy cập ¶ 17.1.2 Các thao tác nhập xuất chuỗi Các thao tác nhập/xuất (I/O) chuỗi C thực cách gọi hàm Các hàm phần thư viện nhập/xuất chuẩn tên stdio.h Một chương trình muốn sử dụng hàm nhập/xuất chuỗi phải có câu lệnh khai báo sau đầu chương trình: #include ; Khi chương trình có chứa câu lệnh biên dịch, nội dung tập tin stdio.h trở thành phần chương trình  Các thao tác nhập/xuất chuỗi đơn giản Sử dụng hàm gets() cách đơn giản để nhập chuỗi thông qua thiết bị nhập chuẩn Các ký tự nhập vào nhấn phím Enter Hàm gets() thay ký tự kết thúc trở đầu dòng ‘\n’ ký tự ‘\0’ Cú pháp hàm sau: Deleted: H gets(str); Trong str mảng ký tự khai báo Tương tự, hàm puts() sử dụng để hiển thị chuỗi thiết bị xuất chuẩn Ký tự xuống dòng kết thúc việc xuất chuỗi Cú pháp hàm sau: puts(str); Trong str mảng ký tự khai báo khởi tạo Chương trình sau nhận vào tên hiển thị thông báo Ví dụ 1: #include void main() { char name[20]; /* name is declared as a single dimensional character array */ clrscr(); puts("Enter your name:"); /* Clears the screen */ /* Displays a message */ gets(name); /* Accepts the input */ puts("Hi there: "); puts(name); /* Displays the input */ getch(); } Nếu tên Lisa nhập vào, chương trình cho kết quả: Enter your name: Lisa 238 Lập trình C Deleted: thông điệp Hi there: Lisa  Các thao tác Nhập/Xuất chuỗi có định dạng Có thể sử đụng hàm scanf() printf() để nhập hiển thị giá trị chuỗi Các hàm dùng để nhập hiển thị kiểu liệu hỗn hợp câu lệnh Cú pháp để nhập chuỗi sau: scanf(“%s”, str); Trong ký hiệu định dạng %s cho biết giá trị chuỗi nhập vào str mảng ký tự khai báo Tương tự, để hiển thị chuỗi, cú pháp là: printf(“%s”, str); Trong ký hiệu định dạng %s cho biết giá trị chuỗi hiển thị str mảng ký tự khai báo khởi tạo Hàm printf() dùng để hiển thị thông báo mà không cần kí tự định dạng Deleted: t Deleted: Hàm printf() sử dụng không kèm theo ký tự định dạng để hiển thị thông báo Có thể sửa đổi chương trình bên để nhập vào hiển thị tên, sử dụng hàm scanf() printf() Ví dụ 2: #include void main() { char name[20]; /* name is declared as a single dimensional character array */ clrscr(); printf("Enter your name: "); /* Clears the screen */ /* Displays a message */ scanf(“%s”, name); /* Accepts the input */ printf("Hi there: %s", name); /* Displays the input */ getch(); } Nếu nhập vào tên Brendan , chương trình cho kết quả: Enter your name: Brendan Hi there: Brendan 17.2 Các hàm chuỗi C hỗ trợ nhiều hàm chuỗi Các hàm tìm thấy tập tin string.h Một số thao tác mà hàm thực là:  Nối chuỗi  So sánh chuỗi Chuỗi Deleted: kết 239  Định vị ký tự chuỗi  Sao chép chuỗi sang chuỗi khác  Xác định chiều dài chuỗi Deleted: Tính 17.2.1 Hàm strcat() Hàm strcat() sử dụng để nối hai chuỗi vào Cú pháp hàm là: Deleted: giá trị Deleted: chuỗi strcat(str1, str2); str1 str2 hai chuỗi khai báo khởi tạo Hàm thực nối chuỗi str2 vào sau chuỗi str1 Chương trình sau nhận vào họ tên,nối chúng với hiển thị họ tên đầy đủ Deleted: Giá trị str2 gắn vào cuối chuỗi str1 Deleted: C Deleted: nối Ví dụ 3: Deleted: Nó Deleted: Chương trình sau nhận vào họ tên Nó nối tên vào họ hiển thị tên nối.¶ #include #include void { Deleted: mảng ký tự main() char firstname[15]; char lastname[15]; clrscr(); printf("Enter your first name: "); scanf("%s", firstname); printf("Enter your last name:"); scanf("%s", lastname); strcat(firstname, lastname); /* Attaches the contents of lastname at the end of firstname */ printf("%s", firstname); getch(); } Kết chương trình minh họa sau: Deleted: Một mẫu xuất hình chương trình là:¶ Enter your first name: Carla Enter your last name: Johnson CarlaJohnson 17.2.2 Hàm strcmp() Deleted: chuỗi Việc so sánh hai số (bằng hay không nhau) thực cách sử dụng toán tử quan hệ Tuy nhiên, để so sánh hai chuỗi kí tự, phải dùng hàm Hàm strcmp() so sánh hai chuỗi với trả số nguyên phụ thuộc vào kết so sánh Cú pháp hàm strcmp() sau: strcmp(str1, str2); str1 str2 hai chuỗi khai báo khởi tạo.Hàm trả giá trị: 240 Deleted: Sự (hay không nhau) hai số chứng thực cách sử dụng toán tử quan hệ Tuy nhiên, để so sánh chuỗi, phải dùng lời gọi hàm Hàm strcmp() so sánh hai chuỗi trả giá trị số nguyên dựa kết so sánh Cú pháp hàm là:¶ Deleted: mảng ký tự Lập trình C  Nhỏ str1str2 Chương trình sau so sánh biến name1 với biến name2, name3, name4 hiển thị kết phép so sánh: Deleted: Chương trình sau so sánh tên với ba tên khác hiển thị kết phép so sánh.¶ Ví dụ 4: #include #include void { main() char name1[15] char name2[15] char name3[15] char name4[15] int i; = = = = "Geena"; "Dorothy"; "Shania"; "Geena"; clrscr(); i = strcmp(name1,name2); printf("%s compared with %s returned %d\n", name1, name2, i); i=strcmp(name1, name3); printf("%s compared with %s returned %d\n", name1, name3, i); i=strcmp(name1,name4); printf("%s compared with %s returned %d\n", name1, name4, i); getch(); } Kết chương trình minh họa sau: Deleted: Mẫu xuất hình chương trình là:¶ Geena compared with Dorothy returned Geena compared with Shania returned -12 Geena compared with Geena returned Lưu ý giá trị trả phép so sánh ví dụ Đó khác mã ASCII hai kí tự khác tìm thấy hai chuỗi Deleted: Lưu ý giá trị trả cho phép so sánh Nó khác biệt giá trị ASCII hai ký tự khác tìm gặp hai chuỗi.¶ 17.2.3 Hàm strchr() Hàm strchr() xác định vị trí xuất ký tự chuỗi Cú pháp hàm là: strchr(str, chr); str mảng ký tự hay chuỗi chr biến ký tự chứa giá trị cần tìm Hàm trả trỏ trỏ đến giá trị tìm chuỗi, NULL không tìm thấy Deleted: gặp Chương trình sau xác định liệu ký tự ‘a’ có xuất tên hai thành phố hay không Deleted: hai tên thành phố nêu Chuỗi 241 Ví dụ 5: #include #include void { main() char str1[15] = "New York"; char str2[15] = "Washington"; char chr = 'a', *loc; clrscr(); loc = strchr(str1, chr); /* Checks for the occurrence of the character value held by chr in the first city name */ if(loc != NULL) printf("%c occurs in %s\n", chr, str1); else printf("%c does not occur in %s\n", chr, str1); loc = strchr(str2, chr); /* Checks for the occurrence of the character in the second city name */ if(loc != NULL) printf("%c occurs in %s\n", chr, str2); else printf("%c does not occur in %s\n", chr, str2); getch(); } Kết chương trình minh họa sau: Deleted: Kết xuất hình chương trình là:¶ a does not occur in New York a occurs in Washington 17.2.4 Hàm strcpy() Trong C toán tử xử lý chuỗi đơn vị Vì vậy, phép gán giá trị chuỗi cho chuỗi khác đòi hỏi phải sử dụng hàm strcpy() Cú pháp hàm là: strcpy(str1, str2); str1 str2 hai mảng ký tự khai báo khởi tạo Hàm chép giá trị str2 vào str1 trả chuỗi str1 Chương trình sau minh họa việc sử dụng hàm strcpy() Nó thay đổi tên khách sạn hiển thị tên Ví dụ 6: #include 242 Lập trình C #include void { main() char hotelname1[15] = "Sea View"; char hotelname2[15] = "Sea Breeze"; clrscr(); printf("The old name is %s\n", hotelname1); strcpy(hotelname1, hotelname2); /*Changes the hotel name*/ printf("The new name is %s\n", hotelname1); /*Displays the new name*/ getch(); } Kết chương trình minh họa sau: Deleted: Kết xuất hình chương trình là:¶ The old name is Sea View The new name is Sea Breeze 17.2.5 Hàm strlen() Hàm strlen() trả chiều dài chuỗi Chiều dài chuỗi hay sử dụng vòng lặp truy câp kí tự chuỗi Cú pháp hàm là: Deleted: Hàm strlen() trả độ dài chuỗi Độ dài chuỗi hữu dụng chương trình truy cập đến ký tự chuỗi vòng lặp Cú pháp hàm là:¶ strlen(str); str mảng ký tự khai báo khởi tạo Hàm trả chiều dài chuỗi str Deleted: độ dài chuỗi Ch••ng trình sau •ây ••a ví d• ••n gi•n s• d•ng hàm strlen() Nó tìm chi•u dài c•a tên m•t công ty hi•n th• tên công ty •ó v•i ký t• •••c phân cách b•i ký t• ‘*’ Ví dụ 7: Deleted: Chương trình sau cho thấy thao tác đơn giản hàm strlen() Nó xác định độ dài chuỗi tên công ty hiển thị tên với số ký tự thêm vào.¶ #include #include void { main() char compname[20] = "Microsoft"; int len, ctr; clrscr(); len = strlen(compname); /* Determines the length of the string */ for(ctr = 0; ctr < len; ctr++) /* Accesses and displays each character of the string*/ printf("%c * ", compname[ctr]); Chuỗi Formatted Deleted: hiển thị tên hình với số kí tự khác.¶ 243 getch(); } Kết chương trình minh họa sau: Deleted: Kết xuất hình chương trình là:¶ M * i * c * r * o * s * o * f * t * 17.3 Truyền mảng vào hàm Trong C, mảng truyền vào hàm tham số, có địa mảng truyền vào Tên mảng không kèm theo số địa mảng Đoạn mã mô tả cách truyền địa mảng ary cho hàm fn_ary(): Deleted: đối Deleted: Đoạn trích mã lệnh sau truyền địa mảng ary vào hàm fn_ary():¶ void main() { int ary[10]; fn_ary(ary); } Nếu tham số hàm mảng chiều tham số khai báo theo cách sau: fn_ary (int ary [10]) { : } /* sized array */ fn_arry (int ary []) { : } /*unsized array */ Deleted: đối Deleted: , Deleted: hình thức Deleted: Nếu hàm nhận mảng chiều, tham số hình thức khai báo theo cách sau đây:¶ Cả hai khai báo cho kết Kiểu thứ sử dụng cách khai báo mảng chuẩn, rõ kích thước mảng Kiểu thứ hai, tham số mảng kiểu int có kích thước Chương trình sau nhận số vào mảng số nguyên Sau mảng truyền vào hàm sum_arr() Hàm tính toán trả tổng số nguyên mảng Ví dụ 8: #include void main() { int num[5], ctr, sum = 0; int sum_arr(int num_arr[]); /* Function declaration */ clrscr(); for(ctr = 0; ctr < 5; ctr++) /*Accepts numbers into the array*/ { 244 Lập trình C Deleted: Cả hai khai báo cho kết Kiểu sử dụng cách khai báo mảng chuẩn Ở kiểu thứ hai, khai báo mảng đơn giản mô tả cần đưa vào mảng kiểu int với độ dài đó.¶ printf("\nEnter number %d: ", ctr+1); scanf("%d", &num[ctr]); } sum = sum_arr(num); /* Invokes the function */ printf("\nThe sum of the array is %d", sum); getch(); } int sum_arr(int num_arr[]) /* Function definition */ { int i, total; for(i = 0, total = 0; i < 5; i++) /* Calculates the sum */ total += num_arr[i]; return total; /* Returns the sum to main() */ } Kết chương trình minh họa sau: Deleted: Một mẫu kết xuất hình chương trình là:¶ Enter number 1: Enter number 2: 10 Enter number 3: 13 Enter number 4: 26 Enter number 5: 21 The sum of the array is 75 17.4 Truyền chuỗi vào hàm Chuỗi, hay mảng ký tự, truyền vào hàm Ví dụ, chương trình sau nhận vào chuỗi lưu mảng ký tự hai chiều Sau đó, mảng truyền vào hàm dùng để tìm chuỗi dài mảng Ví dụ 9: #include void { main() char lines[5][20]; int ctr, longctr = 0; int longest(char lines_arr[][20]); /* Function declaration */ clrscr(); Chuỗi 245 Deleted: đưa vào Deleted: xác định for(ctr = 0; ctr < 5; ctr++) /* Accepts string values into the array */ { printf("\nEnter string %d: ", ctr + 1); scanf("%s", lines[ctr]); } longctr = longest(lines); /* Passes the array to the function */ printf("\nThe longest string is %s", lines[longctr]); getch(); } int longest(char lines_arr[][20]) /* Function definition */ { int i = 0, l_ctr = 0, prev_len, new_len; prev_len = strlen(lines_arr[i]); /* Determines the length of the first element */ for(i++; i < 5; i++) { new_len = strlen(lines_arr[i]); /* Determines the length of the next element */ if(new_len > prev_len) l_ctr = i; /* Stores the subscript of the longer string */ prev_len = new_len; } return l_ctr; /* Returns the subscript of the longest string */ } Kết chương trình minh họa sau: Deleted: Một mẫu kết xuất hình chương trình là:¶ Enter string 1: The Enter string 2: Sigma Enter string 3: Protocol Enter string 4: Robert Enter string 5: Ludlum The longest string is Protocol 246 Lập trình C Tóm tắt học  Chuỗi C cài đặt mảng ký tự kết thúc ký tự NULL (‘\0’) Deleted: trữ  Các biến chuỗi sử dụng để lưu dãy ký tự  Một chuỗi dãy ký tự bao dấu nháy kép  Các chuỗi lưu trữ truy cập cách sử dụng trỏ ký tự  Các thao thác nhập/xuất chuỗi C thực hàm thuộc thư viện nhập/xuất chuẩn stdio.h  Hàm gets() puts() cách đơn giản để nhập vào hiển thị chuỗi  Hàm scanf() printf() sử dụng để nhập vào hiển thị chuỗi với kiểu liệu khác Deleted: Deleted: tập tin  C hỗ trợ nhiều hàm chuỗi, mà tìm thấy thư viện chuẩn string.h Deleted: header Deleted: giá trị  Hàm strcat() sử dụng để nối hai chuỗi vào  Hàm strcmp() so sánh hai chuỗi trả số nguyên dựa vào kết phép so sánh  Hàm strchr() xác định vị trí xuất ký tự chuỗi  Hàm strcpy() chép nội dung chuỗi vào chuỗi khác  Hàm strlen() trả độ dài chuỗi  Trong C, mảng truyền vào hàm tham số, có địa mảng truyền vào  Tên mảng không kèm với số địa mảng Chuỗi 247 Deleted: đối Kiểm tra tiến độ học tập Các chuỗi kết thúc ký tự Số lượng ký tự nhập vào char_arr[15] _ Sự thay đổi giá trị trỏ kiểu chuỗi dẫn đến liệu (Đúng / Sai) Ký tự sử dụng để sang dòng printf() Để sử dụng hàm strcat(), tập tin header phải bao gồm chương trình Hai trỏ so sánh hai biến trỏ đến biến có kiểu khác (Đúng / Sai) strcmp() trả _ hai chuỗi hoàn toàn giống Khi mảng truyền vào hàm, có _ truyền 248 Lập trình C Bài tập tự làm Viết chương trình để nhập vào hai chuỗi Chương trình xác định liệu chuỗi thứ có xuất cuối chuỗi thứ hai không Viết chương trình nhập vào mảng số hiển thị giá trị trung bình Sử dụng hàm để tính giá trị trung bình Chuỗi 249 [...]... vị trí xuất hiện của một ký tự trong một chuỗi  Hàm strcpy() sao chép nội dung của một chuỗi vào một chuỗi khác  Hàm strlen() trả về độ dài của chuỗi  Trong C, khi một mảng được truyền vào hàm như một tham số, chỉ có địa chỉ của mảng được truyền vào  Tên mảng không đi kèm với chỉ số là địa chỉ của mảng Chuỗi 247 Deleted: đối Kiểm tra tiến độ học tập 1 Các chuỗi được kết thúc bởi ký tự 2 Số... nhất để nhập vào và hiển thị chuỗi  Hàm scanf() và printf() có thể được sử dụng để nhập vào và hiển thị chuỗi cùng với các kiểu dữ liệu khác Deleted: đi Deleted: tập tin  C hỗ trợ rất nhiều hàm về chuỗi, mà chúng ta có thể tìm thấy trong thư viện chuẩn string.h Deleted: header Deleted: giá trị  Hàm strcat() được sử dụng để nối hai chuỗi vào một  Hàm strcmp() so sánh hai chuỗi và trả về một số nguyên...Tóm tắt bài học  Chuỗi trong C được cài đặt như mảng các ký tự kết thúc bằng ký tự NULL (‘\0’) Deleted: trữ  Các biến chuỗi được sử dụng để lưu một dãy các ký tự  Một hằng chuỗi là một dãy các ký tự bao bởi dấu nháy kép  Các chuỗi có thể được lưu trữ và truy cập bằng cách sử dụng các con trỏ ký tự  Các thao thác nhập/xuất chuỗi trong C được thực hiện bằng các hàm thuộc... của nó được truyền 248 Lập trình cơ bản C Bài tập tự làm 1 Viết một chương trình để nhập vào hai chuỗi Chương trình sẽ xác định liệu chuỗi thứ nhất có xuất hiện ở cuối chuỗi thứ hai không 2 Viết một chương trình nhập vào một mảng các số và hiển thị giá trị trung bình Sử dụng hàm để tính giá trị trung bình Chuỗi 249 ... 3 Sự thay đổi giá trị của con trỏ kiểu chuỗi có thể dẫn đến mất dữ liệu (Đúng / Sai) 4 Ký tự được sử dụng để sang dòng mới trong printf() 5 Để sử dụng hàm strcat(), tập tin header phải được bao gồm trong chương trình 6 Hai con trỏ có thể so sánh được chỉ khi cả hai biến đang trỏ đến các biến có kiểu khác nhau (Đúng / Sai) 7 strcmp() trả về _ nếu hai chuỗi hoàn toàn giống nhau 8 Khi một mảng

Ngày đăng: 09/10/2016, 20:20

TỪ KHÓA LIÊN QUAN

w