SLIDE1

Tuesday, September 23, 2014

chuỗi , xâu ký tự trong c


chuỗi , xâu ký tự trong c
Trong tất cả các chương trình chúng ta đã thấy cho đến giờ, chúng ta chỉ sử dụng các biến kiểu số, chỉ dùng để biểu diễn các số. Nhưng bên cạnh các biến kiểu số còn có các xâu kí tự, chúng cho phép chúng ta biểu diễn các chuỗi kí tự như là các từ, câu, đoạn văn bản... Cho đến giờ chúng ta mới chỉ dùng chúng dưới dạng hằng chứ chứa quan tâm đến các biến có thể chứa chúng.
Trong C không có kiểu dữ liệu cơ bản để lưu các xâu kí tự. Để có thể thỏa mãn nhu cầu này, người ta sử dụng mảng có kiểu char. Hãy nhớ rằng kiểu dữ liệu này (char) chỉ có thể lưu trữ một kí tự đơn, bởi vậy nó được dùng để tạo ra xâu của các kí tự đơn.
Ví dụ, mảng sau (hay là xâu kí tự):
char ho_ten[20];
có thể lưu một xâu kí tự với độ dài cực đại là 20 kí tự. Bạn có thể tưởng tượng nó như sau:




















Kích thước cực đại này không cần phải luôn luôn dùng đến. ví dụ xâu ho_ten ở trên có thể lưu các từ như "toan" hay "tran khanh toan".. Vì các mảng kí tự có thể lưu các xâu kí tự ngắn hơn độ dài của nó.
chúng ta có thể biểu diễn nó cho dễ hiểu như sau:

T
O
A
N
















T
R
A
N

K
H
A
N
H

T
O
A
N





 1.Khởi tạo các xâu kí tự. 
Vì những xâu kí tự là những mảng bình thường nên chúng cũng như các mảng khác. Ví dụ, nếu chúng ta muốn khởi tạo một xâu kí tự với những giá trị xác định chúng ta có thể làm điều đó tương tự như với các mảng khác: 
char ho_ten[]={'t','o','a','n'};
char ho_ten[]={"toan"};
char ho_ten[]="xau ki tu";
2.các lệnh nhập xuất dữ liệu dùng riêng cho chuỗi, xâu ký tự
  • nhập ký tự vào cho mảng xâu: gets_s(biến kiểu xâu hay tên mảng xâu mà ta đã tạo);
  • xuất ký tự trong mảng xâu ra màn hình: puts(biến kiểu xâu hay tên mảng xâu mà ta đã tạo);
*chú ý: trước khi nhập dữ liệu cho mảng xâu ta nên xóa rác trong bộ nhớ đệm cho đảm bảo an toàn khi viết chương trình, cú pháp như sau: _flushall();
3.ví dụ về khởi tạo, nhập và xuất mảng kiểu xâu ký tự:
#include<stdio.h>
#include<conio.h>
void main()
{
char ho_ten[20];
printf("nhap ho va ten:\n");
_flushall();
gets_s(ho_ten);
puts(ho_ten);
_getch();
}
__________________________________________________

#include<stdio.h>
#include<conio.h>
void main()
{
char ho_ten[] = { "ho va ten" };
puts(ho_ten);
_getch();
}
4.Gán giá trị cho xâu kí tự 
Vì vế trái của một lệnh gán chỉ có thể là một phần tử của mảng chứ không thể là cả mảng, chúng ta có thể gán một xâu kí tự cho một mảng kiểu char sử dụng một phương pháp như sau: 
xau[0]="h";
xau[1]="e";
xau[2]="l";
xau[3]="l";
xau[4]="o";
Nhưng rõ ràng đây không phải là một phương pháp thực tế. Để gán giá trị cho một xâu kí tự, chúng ta có thể sử dụng loạt hàm kiểu strcpy (string copy), hàm này được định nghĩa trong string.h và có thể được gọi như sau: 
strcpy (string1, string2); 
Lệnh này copy nội dung của string2 sang string1. string2 có thể là một mảng, con trỏ hay một hằng xâu kí tự, bởi vậy lệnh sau đây là một cách đúng để gán xâu hằng "Hello" cho mystring: 
strcpy (mystring, "Hello"); 
ví dụ:
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char ho_ten[20];
strcpy_s(ho_ten, "tran minh an");
puts(ho_ten);
_getch();
}
Để ý rằng chúng ta phải include file <string.h> để có thể sử dụng hàm strcpy., trong visual 2013 thì lệnh strcpy thay thế bằng strcpy_s(...,...);
 chúng ta luôn có thể viết một hàm đơn giản như ganchuoi  để thay cho lệnh strcpy:
#include<stdio.h>
#include<conio.h>
void copy(char st1[], char st2[])
{
int n = 0;
do
{
st1[n] = st2[n];
n++;
} while (st2[n] != 0);
}
void main()
{
char ho_ten[20];
copy(ho_ten, "tran minh dang");
puts(ho_ten);
_getch();
} 
5.Các hàm để thao tác trên chuỗi 
Thư viện cstring (string.h) không chỉ có hàm strcpy mà còn có nhiều hàm khác để thao tác trên chuỗi. Dưới đây là giới thiệu lướt qua của các hàm thông dụng nhất:
char* strcat (char* dest, const char* src); 
Gắn thêm chuỗi src vào phía cuối của dest. Trả về dest. 
int strcmp (const char* string1, const char* string2); 
So sánh hai xâu string1 và string2. Trả về 0 nếu hai xâu là bằng nhau. 
char* strcpy (char* dest, const char* src);
Copy nội dung của src cho dest. Trả về dest.
 size_t strlen (const char* string); 
Trả về độ dài của string. 
Chú ý: char* hoàn toàn tương đương với char[] 

Related Posts:

  • hàm trong ngôn ngữ lập trình c (part 1) Hàm là một khối lệnh được thực hiện khi nó được gọi từ một điểm khác của chương trình. Dạng thức của nó như sau: type name ( argument1, argument2, ...) statement  trong đó: type là kiểu dữ liệu được trả về của hàm n… Read More
  • mảng nhiều chiều, đa chiều trong c Mảng nhiều chiều có thể được coi như mảng của mảng, ví dụ, một mảng hai chiều có thể được tưởng tược như là một bảng hai chiều gồm các phần tử có kiểu dữ liệu cụ thể và giống nhau 0 1 2 3 4 0 … Read More
  • hàm trong ngôn ngữ lập trình c (part 2) 1.Truyền tham số theo tham số giá trị hay tham số biến Cho đến nay, trong tất cả các hàm chúng ta đã biết, tất cả các tham số truyền cho hàm đều được truyền theo giá trị. Điều này có nghĩa là khi chúng ta gọi hàm với các… Read More
  • mảng một 1 chiều trong lập trình Mảng là một dãy các phần tử có cùng kiểu được đặt liên tiếp trong bộ nhớ và có thể truy xuất đến từng phần tử bằng cách thêm một chỉ số vào sau tên của mảngĐiều này có nghĩa là, ví dụ, chúng ta có thể lưu 5 giá trị kiểu … Read More
  • Cấu trúc lựa chọn: switch trong c Cú pháp của lệnh switch hơi đặc biệt một chút. Mục đích của nó là kiểm tra một vài giá trị hằng cho một biểu thức, tương tự với những gì chúng ta làm ở đầu bài này khi liên kết một vài lệnh if và else if với nhau. Dạng t… Read More