CHƯƠNG 2: CÁC KHÁI NIỆM CƠ BẢN TRONG C++
Tổng quan về toán tử
Trong bài CẤU TRÚC MỘT CHƯƠNG TRÌNH C++ (Structure of a program), bạn đã biết được một thành phần không thể thiếu trong một chương trình máy tính là Các câu lệnh và biểu thức (Statements and expressions).
Biểu thức ở đây chính là một thực thể toán học. Nói cách khác, nó là một sự kết hợp giữa 2 thành phần:
- Toán hạng: có thể là một hằng số, biến số hoặc một lời gọi hàm.
- Toán tử: xác định cách thức làm việc giữa các toán hạng.
Ví dụ:
// Một số toán tử trong biểu thức bên dưới = ( + ) *
int nSoNguyen = (6 + 9) * (6 - 9);
12
Có 3 loại toán tử trong C++:
- Toán tử 1 ngôi (Unary): chỉ có 1 toán hạng trong biểu thức. Ví dụ: +, - , ++, -- .
- Toán tử 2 ngôi (Binary): có 2 toán hạng trong biểu thức. Ví dụ: +, -, *, /, % .
- Toán tử 3 ngôi (Ternary): có 3 toán hạng trong biểu thức, Ví dụ: Conditional operator ?:
Chú ý: Một số toán tử có thể mang nhiều ý nghĩa khác nhau. Ví dụ: Unary plus (+) và Binary plus (+).
Toán tử số học trong C++ (Arithmetic operators)
Toán tử 1 ngôi số đối (Unary)
Toán tử 1 ngôi (Unary) là toán tử chỉ có 1 toán hạng trong biểu thức.
Bảng bên dưới mô tả 2 toán tử 1 ngôi số đối trong C++, giả sử x = 69:
Chú ý 1:
- Unary plus (+) trả về giá trị của chính toán hạng đó, bạn sẽ không cần phải sử dụng toán tử này vì nó không cần thiết.
- Unary minus (-) trả về số đối của toán hạng đó.
Chú ý 2:
- Nên đặt 2 toán tử một ngôi số đối ngay trước toán hạn để dễ dàng phân biệt với các toán tử số học khác. Ví dụ: -a, không nên - a.
- Tránh nhầm lẫn giữa toán tử 1 ngôi (+, -) và toán tử 2 ngôi (+, -). Ví dụ: x = 6 - -9.
Toán tử số học 2 ngôi (Binary)
Toán tử 2 ngôi (Binary) là toán tử có 2 toán hạng trong biểu thức. Có 5 toán tử số học 2 ngôi trong C++.
Bảng bên dưới mô tả các toán tử số học trong C++, giả sử x = 6, y = 9:
Toán tử cộng (+), trừ (-), nhân (*) hoạt động một cách bình thường như trong toán học.
Về toán tử chia sẽ được phân thành 2 dạng:
- Chia lấy phần nguyên (/): trả về phần nguyên của phép chia. Ví dụ: 9 / 6 = 1 dư 3
- Chia lấy phần dư (%): trả về phần dư của phép chia. Ví dụ: 9 % 6 = 3
Ví dụ:
#include <iostream>
using namespace std;
int main()
{
// count holds the current number to print
int count = 1; // start at 1
// Loop continually until we pass number 100
while (count <= 100)
{
// if count is evenly divisible by 10, print a new line
if (count % 2 == 0)
cout << count << "\t"; // print the current number
// if count is evenly divisible by 20, print a new line
if (count % 10 == 0)
cout << "\n";
count = count + 1; // go to next number
} // end of while
return 0;
}
1234567891011121314151617181920212223
Outputs:
Chú ý khi thực hiện phép chia lấy phần nguyên (/):
- Nếu 2 toán hạng là số nguyên sẽ cho kết quả là số nguyên. Ví dụ: 9 / 6 = 1
- Nếu 1 trong 2, hoặc cả 2 toán hạng là số chấm động thì sẽ cho kết quả là số chấm động (Ví dụ: 9.0 / 6 = 9 / 6.0 = 9.0/ 6.0 = 1.5). Bạn có thể ép kiểu hoặc nhân một trong 2 toán hạng với 1.0 để có kết quả là một số chấm động.
Ví dụ:
#include <iostream>
using namespace std;
int main()
{
int x = 9;
int y = 6;
cout << "int % int = " << x % y << "\n";
cout << "int / int = " << x / y << "\n";
cout << "double / int = " << (1.0 * x) / y << "\n";
cout << "int / double = " << x / (1.0 * y) << "\n";
cout << "double / double = " << (1.0 * x) / (1.0 * y) << "\n";
cout << "double / int = " << static_cast<double>(x) / y << "\n";
cout << "int / double = " << x / static_cast<double>(y) << "\n";
cout << "double / double = " << static_cast<double>(x) / static_cast<double>(y) << "\n";
return 0;
}
12345678910111213141516171819
Outputs:
Toán tử 1 ngôi tăng, giảm (Increment/decrement operators)
Toán tử 1 ngôi tăng, giảm khá phổ biến trong C/C++. Bảng bên dưới mô tả toán tử 1 ngôi tăng, giảm:
- Tiền tố (Prefix): tăng hoặc giảm giá trị của biến x, sau đó x được sử dụng để tính toán.
Ví dụ:
#include <iostream>
using namespace std;
int main()
{
int x = 69;
int y = ++x; // x is now equal to 70, and 70 is assigned to y
cout << x << endl; // x = 70
cout << y << endl; // y = 70
return 0;
}
12345678910111213
Outputs:
- Hậu tố (Postfix): sử dụng x để tính toán, sau đó tăng hoặc giảm giá trị của biến x. Đối với trường hợp này, performance sẽ giảm vì compiler phải thực hiện nhiều hơn. Đầu tiên, compiler sẽ tạo một bản sao của x, sau đó biến x được tăng hoặc giảm, mọi tính toán trong biểu thức sẽ sử dụng giá trị của bản sao và bản sao sẽ được xóa sau khi sử dụng.
Ví dụ:
#include <iostream>
using namespace std;
int main()
{
int x = 69;
int y = x++; // x is now equal to 70, and 69 is assigned to y
cout << x << endl; // x = 70
cout << y << endl; // y = 69
return 0;
}
12345678910111213
Outputs:
Toán tử gán số học trong C++ (Arithmetic assignment operators)
Toán tử gán có mục đích đưa giá trị của một hằng số, biến số, một biểu thức hoặc kết quả của một hàm vào biến được gán.
Bảng bên dưới mô tả các toán tử gán số học trong C++:
Ngoài toán tử gán bằng (=), C++ cung cấp thêm 5 toán tử gán khác tương ứng với 5 toán tử số học cộng (+), trừ (-), nhân (*), chia nguyên (/), chia dư (%). Nhằm giúp biểu thức trở nên ngắn gọn hơn.
Ví dụ:
#include <iostream>
using namespace std;
int sum(int a, int b)
{
return a + b;
}
int main()
{
int x = 9;
int y = 9;
x = x + 6; // x += 6
cout << "x = x + 6 = " << x << endl;
y += 6; // y = y + 6
cout << "y += 6 = " << x << endl;
int z = sum(x, y);
cout << "Sum of x and y is " << z << endl;
return 0;
}
123456789101112131415161718192021222324
Outputs:
Tổng quan hằng số (Constants)
Ở bài học trước đây, Biến trong C++ (Variables), bạn đã biết biến (variable) là tên của một vùng trong bộ nhớ RAM, được sử dụng để lưu trữ thông tin. Bạn có thể gán thông tin cho một biến, thay đổi thông tin của biến trong quá trình chạy chương trình, và có thể lấy thông tin đó ra để sử dụng.
Ví dụ:
int nVarName1; // Khai báo biến nVarName1 kiểu int
int nVarName2{ 69 }; // Khởi tạo giá trị 69 cho biến nVarName2 kiểu int
nVarName2 = 70; // Gán giá trị 70 cho biến nVarName2
1234
Tuy nhiên, trong thực tế có những đối tượng mà giá trị của nó không bao giờ thay đổi (Ví dụ: PI = 3.14159, tốc độ âm thanh v = 343.2 m/s, …). Lúc này, nếu bạn lưu các giá trị này vào biến, rất có khả năng nó sẽ bị thay đổi trong quá trình chạy chương trình. Vậy nên khái niệm hằng (constant) trong lập trình đã ra đời.
Hằng số với từ khóa const
Khai báo một hằng số trong C++
Để khai báo một hằng số trong C++, bạn sử dụng từ khóa const trước hoặc sau kiểu dữ liệu của biến:
const double PI{ 3.14159 }; // Cách này thông dụng hơn
double const SPEED_OF_SOUND{ 343.2 }; // Cách này ít được sử dụng
12
Chú ý: Hằng số phải được khởi tạo trong lúc khai báo, và giá trị của hằng số sẽ không thể thay đổi trong suốt chương trình.
const double PI; // Sai vì hằng số phải được khởi tạo khi khai báo
const double PI{ 3.14159 }; // Khởi tạo hằng số PI
PI = 3; // Sai vì hằng số không thể thay đổi giá trị
1234
Hằng số có thể được khởi tạo giá trị từ một biến thông thường:
int nHeight = 169;
const int HEIGHT{ nHeight };
12
Hằng số có thể sử dụng làm một tham số hàm (function paramater). Cách này được sử dụng phổ biến và khá hữu ích. Cách sử dụng này nhằm 2 mục đích:
- Giúp lập trình viên biết được các tham số hằng sẽ không bị thay đổi giá trị sau lời gọi hàm.
- Đảm bảo các tham số hằng sẽ không bị thay đổi giá trị bên trong hàm.
// Hàm in năm sinh, với tham số hằng nYear
void printYearOfBirth(const int nYear)
{
cout << "Year of birth: " << nYear << endl;
}
123456
Hằng số với chỉ thị tiền xử lý #define
Ngoài cách sử dụng từ khóa const để khai báo một hằng số, C++ vẫn cho phép bạn sử dụng chỉ thị tiền xử lý #define để định nghĩa một macro sử dụng như một hằng số. Phương pháp này thường thấy trong những hệ thống cũ, hiện nay ít được sử dụng hơn vì những hạn chế của nó (sẽ được đề cập bên dưới).
- Cú pháp khai báo:
#define identifier substitution_text
Khi các tiền xử lý gặp chỉ thị này, bất kỳ lần xuất hiện tiếp theo của 'identifier' sẽ được thay bằng 'substitution_text'. Thông thường, 'identifier' sẽ được viết hoa toàn bộ, và sử dụng gạch dưới “_” để thay cho khoảng trắng.
Ví dụ:
#include <iostream>
using namespace std;
// Định nghĩa một macro bằng chỉ thị tiền xử lý #define
#define YEAR_OF_BIRTH 2016
int main()
{
cout << "Year of birth: " << YEAR_OF_BIRTH << endl;
// Khởi tạo một biến integer với giá trị 2016
int nYear{ YEAR_OF_BIRTH };
return 0;
}
12345678910111213141516
Ở chương trình trên, khi bạn biên dịch, tiền xử lý sẽ thay thế tất cả những macro YEAR_OF_BIRTH thành giá trị 2016. Sau đó, chương trình sẽ được biên dịch bình thường.
Cách sử dụng tiền xử lý #define giống như việc bạn sử dụng trực tiếp một số vào chương trình. Nhưng nó có nhiều ưu điểm hơn như:
- Trực quan hơn: khi nhìn vào một tiền xử lý #define, bạn có thể biết mục đích của nó thông qua tên.
- Tránh hardcode: khi tiền xử lý #define được sử dụng ở nhiều nơi, bạn chỉ cần thay đổi giá trị ở nơi khai báo nó, những nơi khác sẽ được tự động cập nhật giá trị.
Mặc dù tiền xử lý #define có những ưu điểm như trên, nhưng bạn nên hạn chế hoặc không nên sử dụng tiền xử lý #define làm hằng số cho chương trình. Có 2 lý do bạn không nên sử dụng nó:
- Gây khó khăn khi gỡ lỗi (debug) chương trình: Các macro là những chỉ thị tiền xử lý, khi chương trình biên dịch, tiền xử lý sẽ thay thế tất cả những macro trong chương trình thành giá trị của nó. Vì vậy, khi bạn debug chương trình, những macro này sẽ không hiển thị giá trị mà nó nắm giữ, điều này sẽ gây khó khăn cho khi debug chương trình.
- Các macro luôn có phạm vi toàn cục: Nghĩa là một macro được #define trong một khối lệnh sẽ ảnh hưởng đến một macro #define trong khối lệnh khác nếu chúng cùng tên. (Chi tiết về biến toàn cục sẽ được hướng dẫn chi tiết trong bài TẦM VỰC CỦA BIẾN TRONG C++ (Variable scope))
Ví dụ:
#include <iostream>
using namespace std;
// Định nghĩa một macro bằng chỉ thị tiền xử lý #define
#define YEAR_OF_BIRTH 2016
// Khai báo prototype
void printYearOfBirth();
int main()
{
cout << "Year of birth: " << YEAR_OF_BIRTH << endl;
// Định nghĩa một macro trùng tên
#define YEAR_OF_BIRTH 20
printYearOfBirth();
return 0;
}
// Định nghĩa hàm
void printYearOfBirth()
{
cout << "Year of birth: " << YEAR_OF_BIRTH << endl;
}
1234567891011121314151617181920212223242526
Outputs:
Trong chương trình trên, macro YEAR_OF_BIRTH đã bị định nghĩa lại trong thân hàm main(). Dẫn đến khi gọi hàm printYearOfBirth(), kết quả in ra đã thay đổi thành 20 thay thì 2016.
Chú ý: Nên sử dụng hằng số với từ khóa const thay vì chỉ thị tiền xử lý #define.
Nên định nghĩa hằng số ở đâu
Một hằng số thường sẽ được sử dụng ở mọi nơi trong chương trình, vì giá trị của nó là không thay đổi (Ví dụ: các hằng số toán học, vật lý, hóa học, …). Việc định nghĩa một hằng số ở nhiều nơi trong chương trình là điều không nên. Vì vậy, bạn nên định nghĩa hằng số ở một nơi, và bạn có thể sử dụng nó ở toàn chương trình.
Có nhiều cách để thực hiện việc này, mình sẽ đề cập 2 cách thường được sử dụng:
- Cách 1: Ở những chương trình đơn giản, bạn có thể định nghĩa một hằng số ở phạm vi toàn cục để có thể sử dụng ở mọi nơi trong file của bạn. (Chi tiết về biến toàn cục sẽ được giới thiệu chi tiết trong bài TẦM VỰC CỦA BIẾN TRONG C++ (Variable scope)).
Ví dụ:
#include <iostream>
using namespace std;
// Định nghĩa hằng số phạm vi toàn cục
const double PI{ 3.14159 };
// Định nghĩa hàm print PI
void printPI()
{
cout << "PI = " << PI << endl;
}
int main()
{
cout << "PI = " << PI << endl;
return 0;
}
123456789101112131415161718
- Cách 2: Ở những chương trình phức tạp hơn, bạn có thể thực hiện theo các bước:
- Tạo một header file định nghĩa các hằng số: để có thể sử dụng ở mọi nơi trong chương trình. (Chi tiết về header file sẽ được giới thiệu chi tiết trong bài LIÊN KẾT NHIỀU FILE TRONG CHƯƠNG TRÌNH C++ (Header files)).
- Tạo một namespace bên trong file header: để có thể phân biệt nếu có một biến khác trùng tên với hằng số của bạn. (Chi tiết về namespace sẽ được giới thiệu chi tiết trong bài KHÔNG GIAN TÊN TRONG C++ (Namespaces)).
- Định nghĩa tất cả các hằng số bên trong namespace.
- #include file header ở nơi bạn cần sử dụng hằng số.
Ví dụ:
// File Constants.h
#ifndef _CONSTANTS_
#define _CONSTANTS_
// Định nghĩa namespace chứa các hằng số
namespace constants
{
const double PI{ 3.14159 };
const double SPEED_OF_SOUND{ 343.2 }; // Tốc độ âm thanh 343.2 m/s
const int YEAR_OF_BIRTH{ 2016 };
// ...
}
#endif // !_CONSTANTS_
123456789101112131415
// File main.cpp
#include <iostream>
#include "Constants.h" // include header file
using namespace std;
//using namespace constants;
int main()
{
// Sử dụng toán tử phân giải phạm vi :: để truy cập hằng số từ namespace
cout << "PI = " << constants::PI << endl;
cout << "Year of birth: " << constants::YEAR_OF_BIRTH << endl;
return 0;
}
1234567891011121314
Outputs:
Tổng quan về chuỗi ký tự (std::string)
Bạn đã được tiếp xúc với chuỗi ký tự (string) ngay từ bài học C++ đầu tiên qua chương trình kinh điển bên dưới:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, HowKteam.com!" << endl;
return 0;
}
12345678
Chuỗi ký tự là tập hợp các ký tự được đặt trong dấu ngoặc kép. Dùng để biểu diễn những thông báo, văn bản, … trong chương trình. Trong chương trình trên, "Hello, HowKteam.com!" chính là một chuỗi ký tự.
Trong C++, kiểu chuỗi ký tự không được xây dựng sẵn (không phải là “built-in string”) mà được cài đặt trong một lớp của thư viện chuẩn STL (C++ Standard Template Library).
Khai báo, khởi tạo và gán giá trị một chuỗi ký tự
Để sử dụng chuỗi trong C ++, bạn cần phải #include thư viện string thuộc namespace std.
#include <string>
// …
std::string strMyName;
123
Bạn có thể sử dụng namespace std để có thể sử dụng string một cách ngắn gọn hơn:
#include <string>
using namespace std;
// …
string strMyName;
1234
Tương tự như các biến thông thường, bạn có thể khởi tạo hoặc gán giá trị cho biến string theo nhiều cách:
/* Khai báo một chuỗi ký tự */
std::string strString;
/* Khởi tạo một chuỗi theo nhiều cách */
string strString0(""); // Khởi tạo chuỗi strString0 rỗng
string strString1("Kteam"); // Khởi tạo chuỗi "Kteam" cho strString1
string strString2{ "Free Education!" }; // Khởi tạo chuỗi "Kteam" cho strString2
string strString3 = "HowKteam.com"; // Khởi tạo chuỗi "HowKteam.com" cho strString3
string strString4 = strString1; // Gán giá trị chuỗi strString1 cho strString4
/* Khởi tạo một chuỗi số */
string strNumber = "88"; // Khởi tạo chuỗi "88" cho strNumber, không phải số
123456789101112
Chú ý: Khi khởi tạo giá trị là số cho một chuỗi, chuỗi đó không được coi là một số, và không có những thao tác như một biến số học ( cộng, trừ, nhân, chia …). C++ không tự động chuyển một chuỗi số về giá trị số nguyên (integer) hoặc số chấm động (floating point).
Xuất một chuỗi ký tự (string output):
Ở bài NHẬP & XUẤT DỮ LIỆU TRONG C++ (Input and Output), bạn đã biết cách nhập xuất dữ liệu trong C++. Đối với chuỗi ký tự, thao tác xuất cũng tương tự:
#include <iostream>
#include <string>
using namespace std;
int main()
{
/* Khởi tạo một chuỗi HowKteam.com cho biến strString */
string strString("HowKteam.com");
/* Xuất chuỗi HowKteam.com lên console */
cout << strString << endl;
return 0;
}
1234567891011121314
Outputs:
Nhập một chuỗi ký tự (string input)
Đối với các kiểu dữ liệu cơ bản, bạn sử dụng đối tượng std::cin để đọc một thông tin nào đó từ thiết bị nhập chuẩn (mặc định là bàn phím), sau đó lưu thông tin đó vào một biến.
Cùng thử với kiểu dữ liệu std::string:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Enter your full name: ";
string strName;
cin >> strName;
cout << "Enter your age: ";
string strAge;
cin >> strAge;
cout << "Your name is " << strName << endl;
cout << "Your age is " << strAge << endl;
return 0;
}
12345678910111213141516171819
Outputs:
Trong chương trình trên, khi nhập chuỗi “Hello HowKteam.com! Free Education!” và nhấn enter, chương trình đã bỏ qua lần nhập tiếp theo và xuất ra kết quả.
Chú ý: Toán tử >> (extraction operator) được dùng chung với std::cin chỉ cho phép đọc một dãy gồm các ký tự liền nhau (không có khoảng trắng), nên nó sẽ trả về các ký tự đến khoảng trắng đầu tiên trong chuỗi vừa nhập.
Vì vậy, chương trình có 2 lần yêu cầu nhập chuỗi, nhưng khi bạn nhập một chuỗi có 3 khoảng trắng như trên, nó chỉ cho phép bạn nhập vào 1 lần.
Nhập văn bản bằng std::getline()
Để đọc đầy đủ chuỗi có khoảng trắng từ đối tượng nhập của lớp iostream (ví dụ cin), bạn nên sử dụng hàm std::getline() (trong namespace std)
Ví dụ:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Enter your full name: ";
string strName;
getline(cin, strName);
cout << "Enter your age: ";
string strAge;
getline(cin, strAge);
cout << "Your name is " << strName << endl;
cout << "Your age is " << strAge << endl;
return 0;
}
12345678910111213141516171819
Outputs:
Ở chương trình trên, bạn đã nhập được chuỗi ký tự bao gồm cả khoảng trắng với hàm std::getline().
Kết hợp giữ std::cin và std::getline() sẽ gây ra kết quả không mong muốn
Ví dụ:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Enter your age: ";
int nAge;
cin >> nAge;
cout << "Enter your name: ";
string strName;
getline(cin, strName);
cout << "Hello, " << strName << endl;
cout << "Your age " << nAge << endl;
return 0;
}
12345678910111213141516171819
Outputs:
Khi bạn nhập một thông tin bất kỳ, mọi ký tự bạn gõ vào bàn phím (kể cả ký tự Enter \n
) đều được đẩy vào bộ nhớ đệm trước khi được gán vào biến.
Trong chương trình trên, bạn nhập số bằng std:: cin, chúng chỉ nhận số chứ không nhận được ký tự Enter (‘\n’), và ký tự Enter vẫn còn trong bộ nhớ đệm. Đến khi nhập chuỗi, hàm std::getline() nhận được ký tự Enter từ bộ nhớ đệm thì kết thúc nhập và chương trình vẫn chạy tiếp. Điều này khiến kết quả bị sai.
Bạn có thể xóa ký tự Enter ‘\n’ sau khi sử dụng std::cin bằng cách sử dụng phương thức cin.ignore() thuộc namespace std:
// Xóa khỏi bộ nhớ đệm 32767 ký tự, hoặc đến khi gặp ký tự '\n'
std::cin.ignore(32767, '\n');
12
Ví dụ:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Enter your age: ";
int nAge;
cin >> nAge;
// Xóa khỏi bộ nhớ đệm 32767 ký tự, hoặc đến khi gặp ký tự '\n'
std::cin.ignore(32767, '\n');
cout << "Enter your name: ";
string strName;
getline(cin, strName);
cout << "Hello, " << strName << endl;
cout << "Your age " << nAge << endl;
return 0;
}
12345678910111213141516171819202122
Outputs:
Chú ý: Nên xóa ký tự Enter ‘\n’ trong bộ nhớ đệm trước khi nhập chuỗi bất kỳ.
Nhập một văn bản bao gồm ký tự xuống dòng
Mặc định, hàm std::getline() sử dụng ký tự ‘\n’ khi nhấn phím Enter là ký tự báo hiệu kết thúc việc nhập chuỗi.
Nếu muốn nhập nhiều dòng văn bản vào một biến string, bạn có thể thay đổi nó, ví dụ:
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Enter your text: ";
string strText;
getline(cin, strText, '_');
cout << "Your text: " << endl;
cout << strText << endl;
return 0;
}
123456789101112131415
Outputs:
Trong chương trình trên, bạn có thể nhập chuỗi ký tự cho đến khi chương trình nhận vào ký tự gạch dưới ‘_’. Kết quả nhận được là một chuỗi ký tự gồm nhiều dòng.
Một số thao tác cơ bản với chuỗi ký tự
Nối chuỗi (Appending strings)
Bạn có thể sử dụng toán tử + để nối hai chuỗi với nhau, hoặc toán tử += để nối thêm một chuỗi khác.
Ví dụ:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a("69");
string b("96");
string c = a + b; // a and b will be appended, not added
cout << c << endl;
a += " string";
cout << a << endl;
return 0;
}
12345678910111213141516
Outputs:
Chú ý: Khi nối chuỗi, lưu ý là 2 chuỗi số được nối lại với nhau, không phải cộng 2 giá trị số.
Độ dài chuỗi ký tự (String length)
Lớp string định nghĩa cho chúng ta 2 phương thức để thực hiện việc lấy ra độ dài của chuỗi kí tự.
Ví dụ:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string myName("Hello HowKteam.com!");
cout << myName << " has " << myName.length() << " characters\n";
cout << myName << " has " << myName.size() << " characters\n";
return 0;
}
12345678910111213
Outputs: