Bài 1 : Cấu Trúc Của Một Chương Trình C++


Gán giá trị cho xâu kí tự



tải về 448.29 Kb.
trang10/14
Chuyển đổi dữ liệu02.09.2016
Kích448.29 Kb.
#31125
1   ...   6   7   8   9   10   11   12   13   14

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


Каталог: gallery
gallery -> Album hưƠng xuâN. Thơ phổ nhạC. Phòng thu audio. Nhạc Sĩ Đình Đạm
gallery -> Phụ cấp độc hại, nguy hiểm
gallery -> BỘ TÀi chính cộng hoà XÃ HỘi chủ nghĩa việt nam độc lập Tự do Hạnh phúc
gallery -> Nobel văn chương năm 1987 joseph brodsky
gallery -> TÊN ĐỀ TÀi luận văn thạc sĩ khnn chuyên ngành chăn nuôi từ NĂM 1996 2012
gallery -> BÁo cáo công khai đIỀu kiệN ĐẢm bảo chất lưỢng đÀo tạo tiến sĩ Tên chuyên ngành, mã số, quyết định giao chuyên ngành đào tạo
gallery -> CHƯƠng I kế toán vốn bằng tiềN
gallery -> KẾ toán vốn bằng tiền I. YÊU cầU
gallery -> Phụ lục II nguyên tắC, NỘi dung và KẾt cấu tài khoản kế toáN

tải về 448.29 Kb.

Chia sẻ với bạn bè của bạn:
1   ...   6   7   8   9   10   11   12   13   14




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương