Phân biệt tham chiếu và tham trị

Tham trị

Tiếng Anh là pass-by-value. Tham trị có nghĩa là chỉ truyền giá trị của biến này cho một biến mới và khi thay đổi biến mới không làm thay đổi biến cũ

truyen-tham-so

 

Tham biến

Tên tiếng anh là pass-by-reference. Truyền tham biến có nghĩa là truyển cho biến mới địa chị ô nhớ y hệt của biến cũ mặc dù tên biến khác. Khi thay đổi biến mới thì cũng làm thay đổi biến cũ. Truyển tham biến còn được hiểu là thêm một nickname mới cho biến cũ.

tham-tri

Mảng (array) trong PHP

  1. Array là gì ?
  • Mảng là một biến đặc biệt và có thể lưu trữ nhiều giá trị.
  • Một biến thông thường chỉ chứa một giá trị duy nhất, nếu chúng ta muốn chứa nhiều giá trị trong một biến thì biến đó phải là một mảng (ví dụng cần lưu trữ thông tin của 1000 nhân viên).
  • Trong PHP có 3 loại mảng: mảng số nguyên, mảng kết hợp và mảng đa chiều.
  1. Khai báo và sử dụng mảng số nguyên
  • Mảng số nguyên là mảng mà các chỉ số của các phần tử phải thuộc kiểu số nguyên (mảng số nguyên còn được gọi là mảng liên tục)
  • Tìm hiểu cách truy cập các phần tử của mảng và in mảng.
  1. Khai báo và sử dụng mảng kết hợp:
  • Mảng kết hợp là các chỉ số của các phần tử có thể là chuỗi hoặc số (Mảng kết hợp còn gọi là không liên tục)
  • In danh sách các phần tử trong mảng kết hợp: foreach
  1. Khai báo và sử dụng mảng đa chiều
  • Mảng đa chiều là mảng mà mỗi phần tử trong mảng chính có thể là một mảng và mỗi phần tử trong mảng con lại cũng có thể là một mảng (mảng đa chiều còn gọi là mảng lồng)
  • In phần tử, in sách các phần tử trong mảng đa chiều: foreach
  1. Lấy danh sách các khóa và danh sách các giá trị của một mảng nào đó ?
  • array_value ($array) trả về một mảng liên túc có các phần tử có giá trị là giá trị lấy từ các phần tử của mảng $array.
  • array_keys ($array): trả về một mảng liên tục có các phần tử có giá trị là khóa lấy các phần tử của mảng $array.
  1. Loại bỏ phần tử ở đầu và cuối mảng
  • array_pop ($array) loại bỏ phần tử cuối cùng của mảng. Hàm trả về phần tử cuối cùng đã được loại bỏ.
  • array_shift ($array) loại bỏ phần tử đầu tiên của mảng. Hàm trả về phần tử đầu tiên đã được loại bỏ.
  1. Loại bỏ phần tử trùng nhau trong mảng
  • array_unique ($array) loại bỏ những phần tử trùng nhau trong mảng và trả về mảng mới.
  1. Xóa phần tử ở vị trí bất kì của mảng
  • Sử dụng hàm unset để xóa bỏ phần tử ở vị trí bất kỳ trong mảng.
  1. Thêm một hoặc nhiều phần tử ở đầu hoặc cuối mảng ?
  • array_push ($array, $val1, $val2, … , $valn) thêm một hoặc nhiều phần từ vào cuối mảng $array. Hàm trả về kiểu nguyên là số lượng của mảng $array mới.
  • array_unshift ($array, $val1, $val2, … , $valn) thêm một hoặc nhiều phần tử vào đầu mảng $array. Hàm trả về kiểu số nguyên là số lượng phần tử của mảng $array mới.
  1. Đảo ngược vị trí các phần tử của mảng
  • array_reverse ($array) đảo ngược vị trí các phần tử của mảng, phần tử cuối trở thành phần tử đầu tiên, phần tử ké cuối trở thành phần tử thứ nhì, … kết quả trả về là một mảng mới.
  1. Hoán đổi chỉ số và giá trị của mảng (đảo $key và $value)
  • Sử dụng hàm array_flip ($array) trả về một mảng có khóa và giá trị được hoán đổi cho nhau so với mảng $array (giá trị thành khóa và khóa thành giá trị)
  1. Xác định tổng, giá tri lớn nhất và giá trị nhỏ nhất trong mảng
  • Tính tổng các phần tử trong mảng array_sum ($array)
  • Xác định phần tử nhỏ nhất trong mảng min($array)
  • Xác định phần tử lớn nhất trong mảng max($array)
  1. Thống kê số lần xuất hiện của các phần tử trong mảng
  • Để thống kê sự xuất hiện của các phần tử trong mảng chúng ta sử dụng hàm array_count_values ($array)
  1. Kết hợp các mảng lại với nhau
  • array_merge ($array1, $array2, … , $arrayn) nhạp 2 hay nhiều mảng thành một mảng duy nhất và trả về mảng mới.
  1. Lấy ngẫu nhiên chỉ số ($key) của một mảng nào đó
  • array_rand ($array, $number) lấy ngẫu nhiên $number phần tử mảng $array và đưa vào mảng mới (láy giá trị khóa).
  1. Tìm kiếm phần tử trong mảng
  • array_search ($value, $array) tìm phần tử mang giá trị $value trong mảng $array. Trả về khóa của phần tử tìm được.
  1. Kiểm tra một $key hoặc $value nào đó có tồn tại trong mảng hay không ?
  • array_key_exists ($key, $array) kiểm tra khóa $key có tồn tại trong mảng $array hay không ? Nếu có trả về giá trị true.
  • in_array ($value, $array) kiểm tra giá trị $value có tồn tại trong mảng $array hay không ? Nếu có trả về giá trị true.
  1. Chuyển đổi các key trong mảng thành chữ hoa hoặc chữ thường
  • Sử dụng hàm array_change_key_case ($array, case) để chuyển đổi các chỉ số ($key) trong mảng thành chữ hoa hoặc chữ thường, tuy thuộc vào tham số case truyền vào. Kết quả trả về của hàm sẽ là một mảng mới.
  1. Chuyển đổi qua lại giữa mảng và chuỗi
  • implode ($str, $array) chuyển các giá trị của mảng $array thành một chuỗi bao gồm các phần tử các nhau bởi ký tự $str
  • explode ($delimiter, $str) chuyển một chuỗi thành một mảng. Tách chuỗi dựa vào $delimiter, mỗi đoạn tách ra sẽ thành một phần tử của mảng mới.
  1. Truy xuất phần tử của mảng với end, current, next và previous.
  • current($array) truy xuất phần tử hiện tại của mảng.
  • end($array) truy xuất phần tử cuối cùng của mảng.
  • next($array) truy xuất phần tử sau phần từ của mảng.
  • prev($array) truy xuất phần tử trước phần tử hiện tại của mảng.
  • reset() quay về vị trí phần tử đầu tiên trong mảng.
  1. Chuyển đổi mảng về một chuỗi đặc biệt và ngược lại
  • serialize ($value) chuyển chuỗi/mảng/đối tượng $value thành một chuỗi đặc biệt để lưu vào cơ sở dữ liệu.
  • unserialize($value) chuyển chuỗi đặc biệt được tạo từ serialize($value) về trạng thái ban đầu.
  1. Xáo trộn thứ tự các phần tử trong mảng
  • Sử dụng hàm shuffle để tạo ra mảng mới (mảng liên tục) với thứ tự các phần tử trong mảng bị thay đổi.
  1. Tạo mảng từ các biến có sẵn
  • Sử dụng hàm compact() để tạo ra mảng từ các biến có sẵn.
  1. Tạo mảng sử dụng hàm range()
  • Sử dụng hàm range để tạo ra các phần tử của mảng.
  1. Tạo mảng bằng cách sử dụng hàm array_combine
  • Sử dụng hàm array_combine($key, $value) để tạo một mảng mới có khóa được lấy từ mảng $key và giá trị được lấy từ mảng $value theo tuần tự.
  1. Các trường hợp so sánh giữa hai mảng
  • Trường hợp 1: So sánh khác nhau:
    • array_diff ($array1, $array2) trả về một mảng bao gồm các phần tử có giá trị tồn tại trong mảng $array1 nhưng không tồn tại trong mảng $array2
    • array_diff_key ($array1, $array2) trả về một mảng bao gồm các phần tử có khóa tồn tại trong mảng $array1 nhưng không tồn tại trong mảng $array2
    • array_diff_assoc ($array1, $array2) tả về một mảng bao gồm các phần tử có khóa và giá trị tồn tại trong mảng $array1 nhưng không tồn tại trong mảng $array2
  • Trường hợp 2: So sánh giống nhau:
    • array_intersect ($array1, $array2) trả về một mảng bao gồm các phần tử giống nhau về giá trị 2 mảng $array1 và $array2
    • array_intersect_key ($array1, $array2) trả về một mảng bao gồm các phần tử giống nhau về khóa giữa 2 mảng $array1 và $array2
    • array_intersect_assco ($array1, $array2) trả về một mảng bao gồm các phần tử giống nhau về khóa và giá trị giữa 2 mảng $array1 và $array2
  1. Xử lý giá trị các phần tử của mảng
  • Hàm array_walk sẽ gửi các giá trị của mảng đến một hàm nào đó để xử lý và nhận kết quả về là một mảng mới.
  1. Tìm hiểu hàm array_map
  • Hàm array_map sẽ gửi các giá trị của một hay nhiều mảng đến hàm nào đó đẻ xử lý và nhận kết quả trả về là một mảng mới.
  1. Trích xuất một đoạn phần tử của mảng
  • Hàm array_slice (array, offset, length, preserve) trích xuất lấy một đoạn phần tử của mảng từ vị trí bắt đầu offset (vị trí bắt đầu trong mảng là 0) và lấy length phần từ.
  1. Thay thế một đoạn phần tử của mảng
  • Hàm array_splice (array1, offset, length, array2) xóa bỏ một đoạn phần tử của mảng array1 từ vị trí offset và lấy length phần tử. Sau đó thay thế các phần tử bị loại bỏ bằng mảng array2
  1. Các trường hợp sắp xếp mảng
  • Sắp xếp theo giá trị:
    • sort(array) sắp xếp các phần tử trong mảng array tăng dần theo giá trị.
    • rsort(array) sắp xếp các phần tự trong mảng array giảm dần theo giá trị.
  • Sắp xếp theo khóa
    • ksort(array) sắp xếp các phần tử trong mảng array tăng dần theo khóa.
    • krsort(array) sắp xếp các phần tử trong mảng array giảm dần theo khóa.

Thao tác nâng cao trên mảng

 

  • Mảng là một biến đặc biệt và có thể lưu trữ nhiều giá trị (còn biến thì không). Trong PHP có 3 loại mảng: mảng số nguyên, mảng kết hợp và mảng đa chiều.
Mảng số nguyên Mảng kết hợp Mảng đa chiều
Tên gọi khác Mảng liên tục Mảng không liên tục Mảng lồng
Đặc điểm Chỉ số của mảng là số Chỉ số của mảng là chuỗi hoặc số Mỗi phần tử trong mảng chính là có thể là một mảng và mỗi phần tử trong mảng con cũng có thể là một mảng
In mảng Câu lệnh for Câu lệnh foreach

 

  1. Các hàm sử lý mảng:
STT Hàm Chức năng
1 print_r ($array) Xem cấu trúc mảng
2 count ($array) Trả về giá trị kiểu số nguyên là phần tử của mảng, hay là đếm số phần tử trong mảng. Có thể sử dụng hàm sizeof ($array)
3 array_values ($array) Trả về một mảng liên tục có các phần tử có giá trị là giá trị lấy từ các phần tử của mảng $array
4 array_keys ($array) Trả về một mảng liên tục có các phần tử có giá trị là khóa lấy từ các phần tử của mảng $array
5 array_pop ($array) Loại bỏ phần tử cuối của mảng. Hàm trả về phần tử cuối đã được loại bỏ.
6 array_shift ($array) Loại bỏ phần tử đầu tiên của mảng. Hàm trả về phần tử đầu tiên đã được loại bỏ.
7 array_unique ($array) Loại bỏ những phần tử trùng nhau trong mảng và trả về mảng mới
8 unset () Xóa phần tử ở vị trí bất kì của mảng
9 array_push ($array, $val1, $val2, … , $valn) Thêm một hoặc nhiều phần tử vào cuối mảng $array. Hàm trả về kiểu số nguyên là số lượng phần tử của mảng $array mới
10 array_unshift ($array, $val1, $val2, … , $valn) Thêm một hoặc nhiều phần tử vào đầu mảng $array. Hàm trả về kiểu số nguyên là số lượng phần tử của mảng $array mới
11 array_reverse ($array) Đảo ngược vị trị các phần tử của mảng, phần tử cuối trở thành phần tử đầu tiên, phần tử kế cuối trở thành phần tử thứ nhì, … kết quả trả về là một mảng mới.
12 array_flip ($array) Trả về một mảng có khóa và giá trị được hoán đổi cho nhau so với $array (giá trị thành khóa và khóa thành giá trị)
13 array_sum ($array) Tính tổng các phần tử trong mảng
14 min ($array) Xác định phần tử nhỏ nhất trong mảng.
15 max ($array) Xác định phần tử lớn nhất trong mảng.
16 array_count_values ($array) Thống kê số lần xuất hiện của các phần tử trong mảng.
17 array_merge ($array1, $array2, … , $arrayn) Nhập 2 hay nhiều mảng thành một mảng duy nhất và trả về mảng mới
18 array_rand ($array, $number) Lấy ngẫu nhiên $number phần tử mảng $array và đưa vào mảng mới (lấy giá trị khóa)
19 array_search ($value, $array) Tìm phần tử mang giá trị $value trong mảng $array. Trả về khóa của phần tử tìm được
20 array_key_exists ($key, $array) Kiểm tra khóa $key có tồn tại trong mảng $array hay không ? Nếu có trả về giá trị true
21 in_array ($value, $array) Kiểm tra giá trị $value có tồn tại trong mảng $array hay không ? Nếu có trả về true
22 array_slice ($array, $begin, $finish) Trích lấy một đoạn phần tử của mảng $array từ vị trí $begin đến vị trí $finish. Phần tử đầu tiên (chỉ số 0), phần tử cuối cùng (chỉ số -1 hay count($array)-1)
23 array_change_key_case ($array, case) Chuyển đổi các key trong mảng thành chữ hoa hoặc chữ thường
24 implode ($str, $array) Chuyển đổi giá trị của mảng $array thành một chuỗi bao gồm các phần tử cách nhau bởi ký tựu $str
25 explode ($delimiter, $str) Chuyển một chuỗi thành một mảng. Tách chuỗi dựa vào $delimiter, mỗi đoạn tách ra sẽ thành một phần tử của mảng mới.
26 current($array) Truy xuất phần tử hiện tại của mảng
27 end($array) Truy xuất phần tử cuối cùng của mảng
28 next($array) Truy xuất phần  tử sau phần tử hiện tại của mảng
29 prev($array) Truy xuất phần tử trước phần tử hiên tại của mảng
30 reset() Quay về vị trí phần tử đầu tiên trong mảng
31 serialize ($value) Chuyển chuỗi/mảng/đối tượng $value thành một chuỗi đặc biệt để lưu vào cơ sở dữ liệu
32 unerialize ($value) Chuyển chuỗi đặc biệt về trạng thái ban đầu
33 shuffle ($array) Tạo ra mảng mới (mảng liên tục) với thứ tự các phần tử trong mảng bị thay đổi
34 compact() Tạo ra mảng mới từ các biến có sẵn
35 range() Sử dụng hàm range để tạo ra các phần tử của mảng
36 array_combine ($key, $values) Tạo một mảng mới có khóa được lấy từ mảng $keys và giá trị được lấy từ mảng $value theo tuần tự (yêu cầu số phần tử ở 2 mảng phải bằng nhau)
37 array_diff ($array1, $array2) Trả về một mảng bao gồm các phần tử có giá trị tồn tại trong mảng $array1 nhưng không tồn tại trong mảng $array2
38 array_diff_key ($array1, $array2) Trả về một mảng bao gồm các phần tử có khóa tồn tại trong mảng $array1 nhưng không tồn tại trong mảng $array2
39 array_diff_assoc ($array1, $array2) Trả về một mảng bao gồm các phần tử có khóa tồn tại trong mảng $array1 nhưng không tồn tại trong mảng $array2
40 array_intersect ($array1, $array2) Trả về một mảng bao gồm các phần tử giống nhau về giá trị giữa 2 mảng $array1 và $array2
41 array_intersect_key ($array1, $array2) Trả về một mảng bao gồm các phần tử giống nhau về khóa giữa 2 mảng $array1 và $array2
42 array_intersect_assoc ($array1, $array2) Trả về một mảng bao gồm các phần tử giống nhau về khóa và giá trị giữa 2 mảng $array1 và $array2
43 array_walk() Gửi các giá trị của mảng đến một hàm nào đó để xử lý và nhận kết quả trả về là một mảng mới
44 array_map() Gửi các giá trị của một hay nhiều mảng đến một hàm nào đó để xử lý và nhận kết quả trả về là một mảng mới
45 array_stice (array, offset, length, preserve) Trích xuất lấy một đoạn phần tử của mảng từ vị trí bắt đầu offset (vị trí bắt đầu của mảng là 0) và lấy length phần tử
46 array_splice (array1, offset, length, array2) Xóa bỏ một đoạn phần tử của mảng array1 từ vị trị bắt đầu và lấy length phần tử. Sau đó thay thế các phần tử bị loại bở bằng mảng array2
47 aort(array) Sắp xếp các phần tử trong mảng array tăng dền theo giá trị
48 rsort(array) Sắp xếp các phần tử trong mảng array giảm dền theo giá trị
49 ksort(array) Sắp xếp các phần tử trong mảng array tăng dền theo khóa
50 krsort(array) Sắp xếp các phần tử trong mảng array giảm dền theo khóa

 

 

Hàm trong PHP

  1. Hàm là gì ?
  • Hàm là tập hợp một hay nhiều câu lệnh được xây dựng đề thực hiện một chức năng nào đó.
  • Khối lệnh này chỉ cần xây dựng duy nhất một lần, và có thể được sử dụng nhiều lần trong toàn bộ quá trình.
  1. Có bao nhiều hàm trong PHP
  • Hàm trong PHP được xây dựng vô cùng đa dạng và phong phú, bao gồm các hàm xử lý chuỗi, số, mảng, ngày tháng, …
  • Chúng ta tạm thời chia làm 2 nhóm hàm:
    • Hàm được cung cấp sẵn bởi PHP
    • Nhóm hàm do người dùng tự định nghĩa.
  1. Làm sao để viết một hàng trong PHP
  • Vấn đề 1: Hàm không tham số và không có trả vê
  • Vấn đề 2: Sự trả về của hàm
  • Vấn đề 3: Truyền tham số vào hàm:
    • Phân biệt biến toán cục và biến cục bộ
    • Phân biệt tham chiếu và tham trị
  • Vấn đề 4: Tìm hiểu include và require.
    • Hàm không tham số và không có trả về
  • Xây dựng hàm vẽ các box
  • Lưu ý về cách đặt tên hàm
  • Biết cách khai báo và gọi hàm không có tham số và không có trả về.
    • Sự trả về của hàm
  • Xây dựng hàm vẽ các box với sự trả về của hàm return
  • Hàm trả về một giá trị
  • Hàm trả về nhiều giá trị
  • Hàm trả về kết quả true hoặc false
    • Truyển tham số vào hàm
  • Truyển nội dung vào cho box (hàm 1 tham số)
  • Truyển truyền rộng và chiều cao của box (hàm nhiêu tham số)
  • Gán giá trị mặc định cho tham số

Cấu trúc câu lệnh trong PHP

Câu điều kiện

  • Câu điều kiện là câu lệnh chúng ta thường xuyên sử dụng khi viết mã cho bất kì ngôn ngữ lập trình nào.
  • Câu điều kiện giúp chúng ta thực hiện những hành động khác nhau trong những điều kiện khác nhau.
  • Hai nhóm loại câu điều kiện
    • IF…ELSE
      • IF
      • IF … ELSE
      • IF … ELSE IF … ELSE
      • Ví dụ
<?php

$number = 12;

if($number &gt;= 0) {

Echo “Số dương”;

}

?>

Câu điều kiện SWITCH

  • Câu điều kiện switch có một điều kiện mặc định, nghĩa là khi giá trị đưa vào không thỏa mãn một điều kiện nào thì nó sẽ lấy các câu lệnh trong phần điều kiện mặc định để thực hiện.

Vòng lặp

  • Vòng lặp là một đoạn mã lệch trong chương trình được thực hiện lặp đi lặp lại cho đến khi thỏa mãn một điều kiện nào đó.
  • Trong PHP chúng ta có 4 loại vòng lặp
    • for
    • while
    • do … while
    • for … each
  • Vòng lặp for:
  • Vòng lặp while:
  • Vòng lặp do … while:
  • Break – continue
    • Câu lệnh break có chức năng thoát khỏi một vòng lệnh. Nó có thể được sử dụng để nhảy ra khỏi một vòng lặp
    • Câu lệnh continue có chức năng dừng vòng lặp tại giá trị đó và nhảy sang giá trị khác trong vòng lặp.
while (condition) {

continue;

break;

}

Biến toàn cục, biến cục bộ là gì?

Biến toàn cục

  • Vị trí biến đặt bên ngoài tất cả các hàm, cấu trúc…
  • Các biến có ảnh hưởng tới toàn bộ chương trình

Biến cục bộ

  • Vị trí biến đặt bên trong hàm, cấu trúc…
  • Chỉ ảnh hưởng nội bộ bên trong hàm & cấu trúc đó

Điểm khác nhau giữa double và float

Đối với các số thực, chúng ta thường sử dụng float, double và double double.

floatdouble có gì khác nhau?

double có độ chính xác gấp 2 lần float.

float là 32 bit IEEE 754 single precision Floating Point Number, 1 bit cho dấu, (8 bit cho số mũ và 23 * cho giá trị), tức là float có 7 chữ số thập phân có độ chính xác.

double là 64 bit IEEE 754 double precision Floating Point Number (1 bit cho dấu, 11 bit cho số mũ và 52 bit cho giá trị), nghĩa là double có 15 chữ số thập phân có độ chính xác.

Xử lý chuỗi ký tự trong c

Đọc chuỗi ký tự

Khi đọc một chuỗi ký tự bạn cần lưu ý phân biệt 2 cách đọc chuỗi ký tự dưới đây:

Kiểu 1: dùng printf()

char a[100];

scanf("%s", &amp;a); // đọc chuỗi ký tự đầu tiên, không chứa dấu cách
Chú ý là hàm scanf chỉ đọc được một từ chứ không đọc được một đoạn

Ví dụ xâu nhập vào là “xin chao yeu lap trinh” thì đọc bằng scanf chỉ được “xin”. đọc scanf lần thứ 2 thì được “chao”

Để đọc hết cả dòng thì ta phải sử dụng hàm gets()

Kiểu 2: dùng gets()

Đọc hết từng dòng một

Ví dụ input là:

xin chào
yêu lập trình
thì đọc lần thứ nhất ta được xâu “xin chào”, lần thứ 2 ta được xâu “yêu lập trình”

Một số hàm xử lý xâu

Chuyển đổi xâu kí tự sang các kiểu số.

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” đó là một chuỗi gồm 5 kí tự (kể cả kí tự null). Trong 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ố:

#include <iostream.h> #include <stdlib.h> 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;

}

Chạy chương trình:

Enter price: 2.75

Enter quantity: 21

Total price: 57.75

Các hàm xử lí xâu kí tự

Các hàm xử lí xâu kí tự nằm trong thư viện cstring (string.h), khi lập trình các bài toán liên quan đến xâu và các hàm xử lí xâu ta phải khai báo thư viện này. Dưới đây là giới thiệu lướt qua của các hàm thông dụng nhất:

Hàm strcpy(s, t);

Gán nội dung của xâu t cho xâu s (không được dùng dấu ‘=’). Hàm sẽ sao chép toàn bộ nội dung của xâu t (kể cả kí tự kết thúc xâu) vào cho xâu s. Để sử dụng hàm này cần đảm bảo độ dài của mảng s ít nhất cũng bằng độ dài của mảng t. Trong trường hợp ngược lại kí tự kết thúc xâu sẽ không được ghi vào s và điều này có thể gây treo máy khi chạy chương trình.

Ví dụ:

char s[10], t[10] ;

t = “Face” ; // không được dùng s = t ; // không được dùng

strcpy(t, “Face”) ; // được, gán “Face” cho t strcpy(s, t) ; // được, sao chép t sang s

cout << s << ” to ” << t ; // in ra: Face to Face

Hàm strncpy(s, t, n);

Sao chép n kí tự của t vào s. Hàm này chỉ làm nhiệm vụ sao chép, không tự động gắn kí tự kết thúc xâu cho s. Do vậy NLT phải thêm câu lệnh đặt kí tự ‘\0’ vào cuối xâu s sau khi sao chép xong.

Ví dụ:

char s[10], t[10] = “Steven”;

strncpy(s, t, 5) ; // copy 5 kí tự “Steve” vào s s[5] = ‘\0’ ; // đặt dấu kết thúc xâu

cout << s << ” is young brother of ” << t ;

// in câu: Steve is young brother of Steven

Một sử dụng có ích của hàm này là copy một xâu con bất kỳ của t và đặt vào s. Ví dụ cần copy xâu con dài 2 kí tự bắtđầu từ kí tự thứ 3 của xâu t và đặt vào s, ta viết strncpy(s, t+3, 2);

Ngoài ra xâu con được copy có thể được đặt vào vị trí bất kỳ của s (không nhất  thiết phải từ đầu xâu s) chẳng hạn đặt vào từ vị trí thứ 5, ta viết strncpy(s+5, t+3, 2);

Câu lệnh này có nghĩa: lấy 2 kí tự thứ 3 và thứ 4 của xâu t đặt vào 2 ô thứ 5 và thứ 6 của xâu s. Trên cơ sở này chúng ta có thể viết các đoạn chương trình ngắn để thay thế một đoạn con bất kỳ nào đó trong s bởi một đoạn con bất kỳ (có độ dài tương đương) trong t.

Hàm strcat(s, t);

Nối một bản sao của t vào sau s (thay cho phép +). Hiển nhiên hàm sẽ loại bỏ kí tự kết thúc xâu s trước khi nối thêm t. Việc nối sẽ đảm bảo lấy cả kí tự kết thúc của xâu t vào cho s (nếu s đủ chỗ) vì vậy NLT không cần thêm kí tự này vào cuối xâu. Tuy nhiên, hàm không kiểm tra xem liệu độ dài của s có đủ chỗ để nối thêm nội dung, việc kiểm tra này phải do NLT đảm nhiệm. Ví dụ:

char a[100] = “John”, b[4] = “Peter”; strcat(a,“and”);

strcat(a,b);

cout<<a // John and Peter

chars[100],t[100]=”Steve”; strncpy(s,t,3);s[3]=’\0′; // s = “Ste”

strcat(s,”p”); // s = “Step”

cout<<t<<“goes”<<s<<“by”<<s; // Steve goes Step by Step

Hàm strncat(s, t, n);

Nối bản sao n kí tự đầu tiên của xâu t vào sau xâu s. Hàm tự động đặt thêm dấu kết thúc xâu vào s sau khi nối xong (tương phản với strncpy()). Cũng giống strcat hàm đòi hỏi độ dài của s phải đủ chứa kết quả. Tương tự, có thể sử dụng cách viết strncat(s, t+k, n);

để nối n kí tự từ vị trí thứ k của xâu t cho s.

Ví dụ:

char s[20] = “Nha ” ; char t[] = “vua chua”

strncat(s, t, 3); // s = “Nha vua”

hoặc:

strncat(s, t+4, 4); // s = “Nha chua”

Hàm strcmp(s, t);

Hàm so sánh 2 xâu s và t (thay cho các phép toán so sánh). Giá trị trả lại là hiệu 2 kí tự khác nhau đầu tiên của s và t. Từ đó, nếu s1 < s2 thì hàm trả lại giá trị âm, bằng 0 nếu s1==s2, và dương nếu s1 > s2. Trong trường hợp chỉ quan tâm đến so sánh bằng, nếu hàm trả lại giá trị 0 là 2 xâu bằng nhau và nếu giá trị trả lại khác 0 là 2 xâu khác nhau.

Ví dụ: if (strcmp(s,t)) cout << “s khác t”; else cout << “s bằng t” ;

Hàm strncmp(s, t);

Giống hàm strcmp(s, t) nhưng chỉ so sánh tối đa n kí tự đầu tiên của hai xâu. Ví dụ:

char s[] = “Ha Noi” , t[] = “Ha noi” ; cout << strcmp(s,t) ; // -32 (vì ‘N’ = 78, ‘n’ = 110)

cout << strncmp(s, t, 3);// 0 (vì 3 kí tự đầu của s và t là như nhau)

Hàm strcmpi(s, t);

Như strcmp(s, t) nhưng không phân biệt chữ hoa, thường. Ví dụ:

char s[] = “Ha Noi” , t[] = “ha noi” ; cout << strcmpi(s, t) ;// 0 (vì s = t) Hàm strupr(s);

Hàm đổi xâu s thành in hoa, và cũng trả lại xâu in hoa đó. Ví dụ:

char s[10] = “Ha noi”; cout << strupr(s); // HA NOI cout << s; // HA NOI (s cũng thành in hoa)

Hàm strlwr(s);

Hàm đổi xâu s thành in thuờng, kết quả trả lại là xâu s. Ví dụ:

char s[10] = “Ha Noi” ; cout << strlwr(s); // ha noi

cout << s; // ha noi (s cũng thành in thường)

Hàm strlen(s);

Hàm trả giá trị là độ dài thực của xâu s. Ví dụ:

char s[10] = “Ha Noi” ; cout << strlen(s) ; // 5