Top posting users this week

Top posting users this month

Latest topics
» Học Tester ở đâu tốt tại hà nội – học xong làm việc ngay
by hoanghai.esoft Wed 19 Jul 2017, 6:27 pm

» Tài khoản thanh toán và tài khoản tiết kiệm nên để bao nhiêu tiền
by vulieupro Wed 21 Jun 2017, 1:05 pm

» Dịch vụ rút tiền mặt thẻ tín dụng có dành cho những người có thu nhập thấp không?
by vulieupro Mon 19 Jun 2017, 11:51 am

» Rút tiền thẻ tín dụng hiệu quả cao vừa nhanh chóng mà không phải nghĩ về chi phí tại Hà Nội :0868552929
by vulieupro Mon 19 Jun 2017, 9:40 am

» Bạn đang quan tâm đến dịch vụ rut tiền từ thẻ tín dụng tại Hà Nội mà không mất công đi lại hãy lien hệ :0868552929
by vulieupro Fri 16 Jun 2017, 3:02 pm

» Bạn đang đau đầu suy nghĩ xem nên rút tiền mặt từ thẻ tín dụng ở đâu vừa tiện lợi mà chi phí lại thấp đặc biệt không mất thời gian đi lại.Hãy liên hệ :0868552929
by vulieupro Thu 15 Jun 2017, 11:16 pm

» Rút tiền mặt từ thẻ tín dụng tại nhà ở Hà Nội siêu rẻ : 0868552929
by vulieupro Thu 15 Jun 2017, 3:15 pm

» Mua sắm nập chàn không lo thanh toán với thẻ tin dụng lien hệ : 0868552929
by vulieupro Wed 14 Jun 2017, 3:21 pm

» Rút tiền thẻ tín dụng nhanh chóng và tiện lợi nhất quận Hoàn Kiếm :0868552929
by vulieupro Tue 13 Jun 2017, 11:39 pm

» Rút tiền từ thẻ tín dụng quận Tây Hồ 0868552929
by vulieupro Mon 12 Jun 2017, 2:23 pm

» Có ai cho rút tiền mặt từ thẻ tín dụng khu Hà Đông không?
by trangtpbusiness Sun 11 Jun 2017, 4:22 pm

» Dịch vụ quẹt thẻ tín dụng rút tiền mặt tại Hà Nội
by vulieupro Sun 11 Jun 2017, 3:32 pm

» thẻ tín dụng dùng sao để không nợ
by quanglinh Mon 05 Jun 2017, 5:01 pm

» Rút tiền thẻ tín dụng chưa bao giờ dễ và nhanh đến thế gọi ngay 0868552929
by trangtpbusiness Thu 01 Jun 2017, 5:16 pm

» Học Android cơ bản tại Stanford tạo nền tảng thành công
by hoanghai.esoft Wed 18 Jan 2017, 2:55 pm

» Lợi ích của việc khám sức khỏe định kỳ đối với người lao động và doanh nghiệp.
by trangtpbusiness Sat 30 Jul 2016, 11:47 am

» Bán buôn thực phẩm sạch, thực phẩm an toàn cho các đại lý tại Hà Nội
by trangtpbusiness Sat 30 Jul 2016, 11:40 am

» Khám bệnh nghề nghiệp và lập hồ sơ vệ sinh lao động ở đâu uy tín
by trangtpbusiness Sat 23 Jul 2016, 11:28 am

» Cung cấp thực phẩm sạch cho đại lý tại Hà Nội
by trangtpbusiness Sat 23 Jul 2016, 11:20 am

» Khám sức khỏe định kỳ để phát hiện sớm bệnh nguy hiểm
by trangtpbusiness Tue 05 Jul 2016, 10:31 am

» Thực phẩm sạch, thực phẩm an toàn cho người Việt
by trangtpbusiness Tue 05 Jul 2016, 10:29 am

Poll
Statistics
Diễn Đàn hiện có 268 thành viên
Chúng ta cùng chào mừng thành viên mới đăng ký: quanglinh

Tổng số bài viết đã gửi vào diễn đàn là 303 in 196 subjects
4rum đã hoạt động lại rồi sao??!! @@

Fri 24 Aug 2012, 11:24 am by anan

Ô forum hoạt động lại từ bh thế này?! Tưởng là bị del r` cơ đấy! tui k nhìn đâu nha tui k nhìn đâu nha sợ lắm cưng ạ

Comments: 0

chúc mừng năm mới!!

Mon 30 Jan 2012, 8:35 am by Admin

Đừng tự hào vì nghèo mà học giỏi ______ Hãy tự hỏi học giỏi sao vẫn nghèo ..

Comments: 1

hay đấy.............! :)

Thu 10 Nov 2011, 9:13 am by anan

các biểu tượng ở mỗi chuyên mục hay đấy chứ! hi. tuyệt vời vui

Comments: 3

kariohdufbauwefd

Tue 01 Nov 2011, 5:29 pm by Admin

ốm rùi huhu khóc nè

Comments: 3

o0o_000_o0o

Fri 28 Oct 2011, 10:55 pm by Admin

chán thế tự nhiên ngồi nhìn lại chẳng thấy mình làm đc j ra hồn. thời gian ơi sao mày trôi nhanh vậy tao đã làm đc j đâu

Comments: 1

__tất_ cả__

Fri 28 Oct 2011, 11:30 am by Admin

không có j là không thể

Comments: 2

tất cả mọi người

Wed 26 Oct 2011, 9:43 pm by Admin

hjhj ta đã làm sức có thể rùi hiện tại sẽ là như thế này

Comments: 1

hihi ___hihi__hihi

Wed 26 Oct 2011, 5:19 pm by Admin

chúc các bạn ghé thăm 4rum vui vẻ nha

Comments: 0


Hướng dân thao tác với Xâu Ký Tự trong C

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Hướng dân thao tác với Xâu Ký Tự trong C

Bài gửi  Admin on Fri 14 Oct 2011, 4:13 pm

Xâu kí tự
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 jenny [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ụ, jenny có thể lưu xâu "Hello" hay "Merry christmas". 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ó, trong C++ đã có một quy ước để kết thúc một nội dung của một xâu kí tự bằng một kí tự null, có thể được viết là \0 .
Chúng ta có thể biểu diễn jenny (một mảng có 20 phần tử kiểu char) khi lưu trữ xâu kí tự "Hello" và "Merry Christmas" theo cách sau:



Chú ý rằng sau nội dung của xâu, một kí tự null ( \0 ) được dùng để báo hiệu kết thúc xâu. Những ô màu xám biểu diễn những giá trị không xác định.

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 mystring[] = { H , e , l , l , o , \0 };

Tuy nhiên, chúng ta có thể khởi tạo giá trị cho một xâu kí tự bằng cách khác: sử dụng các hằng xâu kí tự.
Trong các biểu thức chúng ta đã sử dụng trong các ví dụ trong các chương trước các hằng xâu kí tự để xuất hiện vài lần. Chúng được biểu diễn trong cặp ngoặc kép ("), ví dụ:

"the result is: "
là một hằng xâu kí tự chúng ta sử dụng ở một số chỗ.
Không giống như dấu nháy đơn ( ) cho phép biểu diễn hằng kí tự, cặp ngoặc kép (") là hằng biểu diễn một chuỗi kí tự liên tiếp, và ở cuối chuỗi một kí tự null ( \0 ) luôn được tự động thêm vào.
Vì vậy chúng ta có thể khởi tạo xâu mystring theo một trong hai cách sau đây:


char mystring [] = { H , e , l , l , o , \0 };
char mystring [] = "Hello";
Trong cả hai trường hợp mảng (hay xâu kí tự) mystring được khai báo với kích thước 6 kí tự: 5 kí tự biểu diễn Hello cộng với một kí tự null.
Trước khi tiếp tục, tôi cần phải nhắc nhở bạn rằng việc gán nhiều hằng như việc sử dụng dấu ngoặc kép (") chỉ hợp lệ khi khởi tạo mảng, tức là lúc khai báo mảng. Các biểu thức trong chương trình như:


mystring = "Hello";
mystring[] = "Hello";
là không hợp lệ, cả câu lệnh dưới đây cũng vậy:


mystring = { H , e , l , l , o , \0 };
Vậy hãy nhớ: Chúng ta chỉ có thể "gán" nhiều hằng cho một mảng vào lúc khởi tạo nó. Nguyên nhân là một thao tác gán (=) không thể nhận vế trái là cả một mảng mà chỉ có thể nhận một trong những phần tử của nó. Vào thời điểm khởi tạo mảng là một trường hợp đặc biệt, vì nó không thực sự là một lệnh gán mặc dù nó sử dụng dấu bằng (=).

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:


mystring[0] = H ;
mystring[1] = e ;
mystring[2] = l ;
mystring[3] = l ;
mystring[4] = o ;
mystring[5] = \0 ;
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ụ:





// setting value to string
#include
#include
int main ()
{
char szMyName [20];
strcpy (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}

J. Soulie


Để ý rằng chúng ta phải include file để có thể sử dụng hàm strcpy.
Mặc dù chúng ta luôn có thể viết một hàm đơn giản như hàm setstring dưới đây để thực hiện một thao tác giống như strcpy:





// setting value to string
#include
void setstring (char szOut [], char szIn [])
{
int n=0;
do {
szOut[n] = szIn[n];
n++;
} while (szIn[n] != 0);
}
int main ()
{
char szMyName [20];
setstring (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}

J. Soulie


Một phương thức thường dùng khác để gán giá trị cho một mảng là sử dụng trực tiếp dòng nhập dữ liệu (cin). Trong trường hợp này giá trị của xâu kí tự được gán bởi người dùng trong quá trình chương trình thực hiện.
Khi cin được sử dụng với các xâu kí tự nó thường được dùng với phương thức getline của nó, phương thức này có thể được gọi như sau:


cin.getline ( char buffer[], int length, char delimiter = \n );
trong đó buffer (bộ đệm) là địa chỉ nơi sẽ lưu trữ dữ liệu vào (như là một mảng chẳng hạn), length là độ dài cực đại của bộ đệm (kích thước của mảng) và delimiter là kí tự được dùng để kết thúc việc nhập, mặc định - nếu chúng ta không dùng tham số này - sẽ là kí tự xuống dòng ( \n ).
Ví dụ sau đây lặp lại tất cả những gì bạn gõ trên bàn phím. Nó rất đơn giản nhưng là một ví dụ cho thấy bạn có thể sử dụng cin.getline với các xâu kí tự như thế nào:





// cin with strings
#include
int main ()
{
char mybuffer [100];
cout << "What s your name? ";
cin.getline (mybuffer,100);
cout << "Hello " << mybuffer << ".\n";
cout << "Which is your favourite team? ";
cin.getline (mybuffer,100);
cout << "I like " << mybuffer << " too.\n";
return 0;
}

What s your name? Juan
Hello Juan.
Which is your favourite team? Inter Milan
I like Inter Milan too.


Chú ý trong cả hai lời gọi cin.getline chúng ta sử dụng cùng một biến xâu (mybuffer). Những gì chương trình làm trong lời gọi thứ hai đơn giản là thay thế nội dung của buffer trong lời gọi cũ bằng nội dung mới.
Nếu bạn còn nhớ phần nói về giao tiếp với, bạn sẽ nhớ rằng chúng ta đã sử dụng toán tử >> để nhận dữ liệu trực tiếp từ đầu vào chuẩn. Phương thức này có thể được dùng với các xâu kí tự thay cho cin.getline. Ví dụ, trong chươn trình của chúng ta, khi chúng ta muốn nhận dữ liệu từ người dùng chúng ta có thể viết:


cin >> mybuffer;
lệnh này sẽ làm việc như nó có những hạn chế sau mà cin.getline không có:



Nó chỉ có thể nhận những từ đơn (không nhận được cả câu) vì phương thức này sử dụng kí tự trống(bao gồm cả dấu cách, dấu tab và dấu xuống dòng) làm dấu hiệu kết thúc..

Nó không cho phép chỉ định kích thước cho bộ đệm. Chương trình của bạn có thể chạy không ổn định nếu dữ liệu vào lớn hơn kích cỡ của mảng chứa nó.
Vì những nguyên nhân trên, khi muốn nhập vào các xâu kí tự bạn nên sử dụng cin.getline thay vì cin >>.

Chuyển đổi xâu kí tự sang các kiểu khác.
Vì một xâu kí tự có thể biểu diễn nhiều kiểu dữ liệu khác như dạng số nên việc chuyển đổi nội dung như vậy sang dạng số là rất hữu ích. Ví dụ, một xâu có thể mang giá trị "1977"nhưng đó là một chuỗi gồm 5 kí tự (kể cả kí tự null) và không dễ gì chuyển thành một số nguyên. Vì vậy thư viện cstdlib (stdlib.h) đã cung cấp 3 macro/hàm hữu ích sau:



atoi: chuyển xâu thành kiểu int.

atol: chuyển xâu thành kiểu long.

atof: chuyển xâu thành kiểu float.
Tất cả các hàm này nhận một tham số và trả về giá trị số (int, long hoặc float). Các hàm này khi kết hợp với phương thức getline của cin là một cách đáng tin cậy hơn phương thức cin>> cổ điển khi yêu cầu người sử dụng nhập vào một số:





// cin and ato* functions
#include
#include
int main ()
{
char mybuffer [100];
float price;
int quantity;
cout << "Enter price: ";
cin.getline (mybuffer,100);
price = atof (mybuffer);
cout << "Enter quantity: ";
cin.getline (mybuffer,100);
quantity = atoi (mybuffer);
cout << "Total price: " << price*quantity;
return 0;
}

Enter price: 2.75
Enter quantity: 21
Total price: 57.75



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:



strcat: 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.

strcmp: 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.

strcpy: char* strcpy (char* dest, const char* src);

Copy nội dung của src cho dest. Trả về dest.

strlen: 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[]
avatar
Admin
Admin
Admin

Giới tính Giới tính : Nam Tổng số bài gửi Tổng số bài gửi : 144
Điểm Điểm : 401
Cám ơn Cám ơn : 8
ngày Sinh ngày Sinh : 30/06/1990
Ngày tham gia Ngày tham gia : 04/09/2011
Tuổi Tuổi : 27
Đến từ Đến từ : Khoái Châu -Hưng Yên

Xem lý lịch thành viên http://nhomai9xhy.forumvi.com

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết