February 2016
Tên miền (hay còn gọi domain) là địa chỉ để truy cập vào website nên nó vô cùng quan trọng với bất kì Blogger nào. Hiện nay đang có rất nhiều website bán tên miền uy tín như godaddy, namecheap, bigrock…. nhưng hầu hết, cái giá bạn phải trả cho một domain đều rơi vào khoảng 8 – 10 đô tùy vào nhà cung cấp. Đối với các công ty thì khoản tiền này chẳng đáng là bao nhưng đối với sinh viên và học sinh thì cũng không phải nhỏ. Chính vì thế, trong bài viết này, mình sẽ chia sẻ 5 website cung cấp tên miền miễn phí hàng đầu thế giới hiện nay. 
Không những vậy, với những bạn mới tập làm website thì tốt nhất các bạn nên đăng kí một tên miền miễn phí để chạy thử và khi thấy ổn định thì đầu tư một tên miền chất lượng hơn.
Trái lại, khi sử dụng các domain miễn phí, bạn sẽ không được lựa chọn đuôi tên miền mà thay vào đó, bạn sẽ phải sử dụng đuôi domain của nhà cung cấp. Nhưng cũng không sao phải không, dùng thử thôi mà.

TOP 5 WEBSITE CUNG CẤP TÊN MIỀN MIỄN PHÍ HÀNG ĐẦU

1. CZ.CC

CZ.CC là một trong những nhà cung cấp tên miền miễn phí tốt nhất hiện nay. Bạn có thể đăng kí số lượng tên miền không giới hạn và hoàn toàn miễn phí với CZ.CC. Hơn nữa, nhà cung cấp còn hỗ trợ cho bạn quản lý DNS của tên miền rất tốt. Hiện nay, CZ.CC cung cấp rất nhiều đuôi tên miền bao gồm : uni.me,mac2.org,oapg.org,11r.biz,11r.us,3vt.info,wsse.us,co7.us,b3g.biz,avli.biz,iilg.biz,vqtel.net…. Quá nhiều lựa chọn cho người dùng miễn phí.
Trang chủ : Click vào đây

2. DOT.TK

Dot.tk là một trang website đăng kí tên miền miễn phí đẹp. So với các tên miền khác thì tên miền .tk đẹp hơn rất nhiều phải không. Với Dot.tk, bạn có thể đăng kí tên miền và chỉnh sửa  CNAME,A,AA records rất dễ dàng với trang quản trị tên miền. Hiện nay, có hàng triệu người đang sử dụng tên miền free của nhà cung cấp này, tại sao bạn lại không ?
Trang chủ : Click vào đây

3. CO.NR

CO.NR là một nhà cung cấp tên miền miễn phí mãi mãi rất tuyệt vời. Người sử dụng nếu lựa chọn CO.NR sẽ được cung cấp miễn phí một số dịch vụ đi kèm như chuyển hướng URL, URL cloaking, và đặc biệt là toàn quyền tùy chỉnh DNS.
Trang chủ : Click vào đây

4. SMARTDOTS

Smartdots là website cung cấp tên miền miễn phí có DNS tốt và rất có tiếng tại Việt Nam. Tên miền đăng kí với smartdots sẽ có dạng ” websitecuaban.xx.xx” . Tuy không được đẹp cho lắm nhưng vẫn là lựa chọn tốt cho ai sử dụng miễn phí.
Trang chủ : Click vào đây

5. CU.CC

CU.CC cũng là một nhà cung cấp tên miền free có tiếng trên thế giới. Bạn có thể đăng kí tới 100tên miền miễn phí với CU.CC và đi kèm là dịch vụ DNS đầy đủ, cũng miễn phí tiếp. Quá tuyệt với phải không.
Trang chủ : Click vào đây
Ngoài ra bạn cũng có thể sử dụng một số nhà cung cấp sau đây :
  • biz.nf
  • biz.ly
  • vn.ee : Việt Nam
  • ………..

Xin chào mọi người!
Đến hiện tại, mình cũng đã đi được phân nửa đoạn đường về lập trình cơ bản trong C++ rồi nhỉ. Mình xin cảm ơn các bạn trong suốt thời gian qua đã ủng hộ, theo dõi blog của mình. Mong rằng mọi người sẽ đồng hành cùng Trà chanh số trong suốt quãng thời gian còn lại nhé :)
Những bài trước, lúc mình xuất thông điệp ra màn hình, đi kèm sau cout là 1 dòng chữ nằm trong dấu ngoặc kép () phải không nào? Mình muốn xuất câu “Hello World” ra màn hình, thì mình sử dụng cú pháp cout << “Hello World”;. Hai từ Hello World trong ngoặc kép chính là chuỗi đấy! Vậy nên bài hôm nay mình sẽ nói sâu hơn về Chuỗi trong C++.

1. Khái niệm

Chuỗi trong C++ chính là 1 dãy các kí tự. Nói chính xác hơn, chuỗi chính là 1 mảng các kí tự. Ở những ngôn ngữ cao hơn, chuỗi đã được hỗ trợ thành 1 kiểu dữ liệu. Tuy nhiên trong C++ có hỗ trợ thư viện STL, trong đó có chuỗi.
Để sử dụng được chuỗi, ta cần phải khai báo những thứ sau ở đầu dòng lệnh
Mã nguồn:
1
2
3
4
5
// Khai báo thư viện
#include <string>
 
// Khai báo namespace (nếu cần thiết)
using namespace std;
Để tạo 1 chuỗi:
string <tên chuỗi> (= <giá trị khởi tạo>);
Mã nguồn:
1
2
3
// Ví dụ
string myString;
string thisString = "Hello";
Vậy là mình đã tạo 1 chuỗi rồi đấy! Tương tự, chuỗi cũng có những phép nối chuỗi (khác với C, ta có thể cộng trực tiếp 2 chuỗi bằng dấu +), tách chuỗi, xoá chuỗi, so sánh chuỗi,… Những phép, hàm xử lý chuỗi ấy, các bạn có thể tìm thấy ở đây (mình không tiện nêu ra vì nó có rất nhiều, sẽ làm bài viết dài và loãng).

2. Liên hệ giữa chuỗi và mảng

Như mình đã nói, chuỗi chính là mảng các kí tự, vì vậy nó có những đặc điểm tương tự 1 mảng thông thường. Tuy nhiên chuỗi có 1 điểm đặc biệt đó chính là kí tự kết thúc ‘\0′. Hình minh hoạ dưới đây sẽ nói rõ điều này:
                     
Đây là chuỗi “Hello” mình vừa phân tích thành mảng. Ta đã biết độ dài của chuỗi “Hello” là 5, tuy nhiên số lượng các phần tử trong mảng lại là 6 (điều này rất quan trọng khi về sau bạn cấp phát động mảng chuỗi).
Ký tự ‘\0’ đóng vai trò rất quan trọng trong chuỗi, nó chính là kí tự kết thúc của 1 chuỗi. Điều đó có nghĩa là, nếu bạn khai báo 1 chuỗi như thế này
Mã nguồn:
1
2
string myString = "Hello\0Son";
cout << myString; // Chỉ xuất "Hello"???
Những ký tự nằm sau ‘\0’ sẽ bị lược bỏ đi. Đây cũng chính là cơ chế đếm ký tự, chỉ việc đếm đến khi nào gặp kí tự ‘\0’ thì ngưng 😀
Tất nhiên, ngoài ký tự kết thúc đó ra, còn lại những tính năng khác thì tương tự với mảng. Ta cũng có thể coi chuỗi là 1 con trỏ, và có thể lấy từng kí tự của nó ra, hệt như 1 mảng thông thường :D. Nếu ai chưa học về mảng, xin hãy xem lại 2 bài Mảng trong C++ mình đã viết nhé!
Trên đây là bài viết về chuỗi trong C++. Những bạn nào học từ căn bản lên cao, thì sẽ thấy ở bài này chẳng có gì khó khăn cả đâu 😀 Cảm ơn các bạn đã theo dõi! Hẹn gặp lại~

Xin chào mọi người!
Mấy mùa này thời tiết thật bất thường, sáng vừa ra thì trời nắng, loay hoay cái chiều lại mưa (!?!?), làm mình nhớ tới câu nói “sáng nắng chiều mưa” của mấy cô con gái vậy :v. Thời tiết bất thường dễ bệnh quá @@
Trở lại vấn đề, bài trước mình đã giới thiệu về Mảng trong C++, nhưng chỉ là phần 1. Ở phần này, mình sẽ đề cập chi tiết hơn về mảng + con trỏ (bạn nào chưa học về con trỏ thì quay về học đi nhé, lướt nhanh dễ tẩu hoả nhập ma lắm)

1. Con trỏ hằng và hằng con trỏ

Ở bài con trỏ mình chưa đề cập đến phần này, bởi vì nếu mà mình viết gộp vào bài đó sẽ có bạn không mường tượng được 2 thằng trên là gì. Nếu bạn dịch ra tiếng anh thì con trỏ hằng (pointer to const) và hằng con trỏ (const pointer) có sự khác nhau rõ ràng:
  • Con trỏ hằng: con trỏ trỏ tới 1 vùng nhớ cố định, nó chỉ có việc chỉ trỏ thôi, còn thay đổi giá trị thì KHÔNG.
  • Hằng con trỏ: con trỏ trỏ cố định tới 1 vùng nhớ, 1 khi đã trỏ vào vùng nhớ rồi thì “mãi không rời xa”, không có khả năng trỏ tới vùng nhớ khác.
  • Ta có thể kết hợp con trỏ hằng và hằng con trỏ lại. Tất nhiên lúc này “lưỡng long nhập thể”, 2 đặc tính của từng đứa sẽ được trộn vào nhau 😀
Ví dụ
Mã nguồn:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int arr[5] = { 1, 2, 3, 4, 5 };
int* const p1 = arr; // Đây là hằng con trỏ
int const* p2 = arr; // Còn đây là con trỏ hằng
p1++; // Báo lỗi. Không thể tăng địa chỉ của hằng con trỏ
p1[1]++; // OK. Kết quả { 1, 3, 3, 4, 5 };
// Nên reset mảng lại giá trị ban đầu để ví dụ cụ thể hơn
(*p2)++; // Báo lỗi, nhưng chỉ trong runtime. Không thể thay đổi giá trị của mảng
p2[1]++; // Tất nhiên, cũng giống trên
p2++; // Nhưng lại OK. Kết quả { 2, 3, 4, 5 }
// Ta có thể kết hợp con trỏ hằng và hằng con trỏ
int const * const p3 = arr;
// Nên cả 2 biểu thức dưới đều báo lỗi
p3++;
p3[1]++;
Đến đây, não của bạn vẫn còn hoạt động chứ :D? Nếu còn thì tiếp tục nhé, mình cũng bị hack não rồi :v
Ta thấy con trỏ hằng “hơi bị” vô dụng trong tình huống trên phải không? Ứng dụng lớn nhất của nó mà mình biết được là với những hàm trả vềhằng số, thì khi ta trỏ tới phải dùng con trỏ hằng (biết thêm thôi, không cần hiểu đâu :v, những bài sau mình sẽ giải thích thêm)

2. Con trỏ trong mảng

“Nãy giờ mình nói lan man mà chả ăn nhập với mảng gì hết vậy hả” sẽ là câu hỏi trong đầu rất nhiều bạn. Thật ra là có đấy!
Mảng chính là con trỏ. Cụ thể hơn, nó là hằng con trỏ. Và địa chỉ của con trỏ chính là phần tử đầu tiên của mảng.
Ở bài trước, ta đã biết mảng chính là tập hợp phần tử cùng kiểu, tất nhiên địa chỉ của nó trong bộ nhớ RAM sẽ nằm kề nhau. Với *arr là lấy vị trí đầu tiên của mảng, thì *(arr + i) chính là lấy vị trí thứ i của mảng.
Mã nguồn:
1
2
3
4
5
int arr[5] = { 1, 2, 3, 4, 5 };
arr++; // Không được
(*arr)++; // OK
(*(arr + 2))++; // OK. Tương đương arr[2]++
Tất nhiên, với mảng nhiều chiều cũng vậy. Mình sẽ nói về mảng 2 chiều nhé, nó chính là mảng của các hằng con trỏ. Và phần tử đầu tiên (arr[0][0]) chính là con trỏ cấp 2. Từ đó ta có thể suy ra cho mảng 3 chiều, 4 chiều, tá lả chiều,…
Mã nguồn:
1
2
int a[3][3] = { { 1, 2, 3}, { 4, 5, 6 }, { 7, 8, 9 } };
*(*(a + 1) + 2) += 5; // Tương đương a[1][2] += 5
Vậy là đã kết thúc bài Mảng trong C++. Mình hi vọng sau bài học này bạn sẽ hiểu sâu hơn về mảng + con trỏ vì nó khá là “hack não” (ngày xưa mình cũng thế huhu). Cảm ơn các bạn đã theo dõi!