Xin chào, và chào mừng trở lại. Tôi muốn cung cấp một minh chứng về một
giải pháp cho thách thức trước đây của chúng tôi liên quan đến việc hiểu các mảng ký tự.
Về cơ bản, chúng ta sẽ viết các hàm để lấy độ dài của một chuỗi,
hàm để nối một chuỗi và một hàm để kiểm tra xem hai
chuỗi có bằng nhau hay không.
Vì vậy, tôi sẽ tạo một dự án. Tôi chỉ định đặt tên cho
nó là hiểu các chuỗi ký tự.
Và điều đầu tiên chúng tôi sẽ làm là chúng tôi sẽ triển khai hàm độ dài này.
Chúng ta sẽ tạo ba
khai báo hàm ở trên cùng.
Chúng tôi sẽ đặt tên cho độ dài một chuỗi đầu tiên.
Chúng tôi sẽ sử dụng hộp đựng lạc đà để đặt tên của chúng tôi.
Điều này sẽ chỉ lấy một chuỗi ký tự không đổi.
Vì vậy, làm thế nào để chúng ta biết đó là một chuỗi vì nó là một mảng ký tự
và sau đó chúng ta sẽ đặt dấu chấm phẩy. Đó sẽ là cái đầu tiên được tạo, vì vậy chúng ta sẽ
chỉ dừng lại ở đó bây giờ.
Và chúng ta sẽ tạo hàm này,
hãy định nghĩa nó
ở bên dưới để bạn hiểu từ khóa ngon lành đó là const.
Const có nghĩa là một chuỗi ký tự không thể thay đổi, không thể sửa đổi.
Lý do chúng ta sử dụng const ở đây là
vì chúng ta không muốn sửa đổi chuỗi bên trong hàm, chúng ta chỉ muốn
phân tích cú pháp về cơ bản và sau đó trả về độ dài, trả về số nguyên.
Hàm này thực sự khá dễ thực hiện vì chúng ta chỉ đang xem xét một mảng.
Vì vậy, chúng tôi thực sự có thể nói trong
số đếm bằng không. Đây là một biến cục bộ.
Nó chỉ có thể được sử dụng bên trong chức năng này.
Bây giờ bạn có thể tự hỏi tại sao chúng ta không thể sử dụng kích thước của toán
tử bởi vì kích thước của toán tử sẽ cho chúng ta biết kích thước của chuỗi, nó sẽ không cho
chúng ta biết có bao nhiêu ký tự bên trong chuỗi đó.
Nhưng tất cả những gì chúng ta cần làm là tạo
một vòng lặp và đi qua mảng cho đến khi chạm vào dấu chấm dứt null.
Vì vậy, chúng tôi có thể nhìn vào chuỗi của chúng tôi. Chúng ta có thể nói
rằng wow số lượng chuỗi không bằng số kết thúc null, dấu chấm
dứt rỗng được biểu diễn bên trong một ký tự đơn lẻ dưới
dạng dấu gạch chéo ngược số 0.
Và chúng ta có thể sử dụng toán tử not bằng vì chúng ta đang so sánh với các ký tự.
Và chúng ta chỉ có một thứ trong phần nội dung của câu lệnh while này cộng
với số cộng, chỉ số tăng dần.
Và sau đó chúng tôi muốn trả lại nó, chúng tôi chỉ nói đếm trả lại và thế là xong.
Đó là toàn bộ hàm độ dài chuỗi. Điều đó khá dễ dàng vì
chuỗi ký tự nằm bên trong một mảng và
chuỗi kết thúc bằng dấu chấm dứt rỗng.
Vì vậy, để kiểm tra điều này, chúng ta có thể
bắt đầu phương thức chính của mình và chúng ta
có thể tạo một số ký tự không
đổi, chỉ cần nói từ
một Jason.
Vì vậy, đây là cách bạn tạo một mảng ký tự trong c.
Bạn không cần phải có hằng số ở đó, nhưng điều này sẽ không được sửa đổi.
Sử dụng từ khóa char, kiểu dữ liệu char, mã định danh và sau đó là dấu ngoặc.
Tốt hơn là không chỉ định kích thước bên trong dấu ngoặc vì trình
biên dịch c sẽ tự động thêm dấu chấm dứt null.
Và sau đó bạn chỉ sau toán
tử gán, bạn đặt chuỗi ký tự của mình bên trong dấu ngoặc kép.
Chúng tôi sẽ tạo một cặp ở đây để đảm bảo rằng nó hoạt động.
Chúng ta có thể hiển thị các chuỗi ký tự rất dễ dàng vì chúng ta chỉ có thể
sử dụng ký hiệu phần trăm s, ngoại trừ những gì chúng ta thực sự muốn hiển thị
ở đây là độ dài. Vì vậy, chúng ta sẽ sử
dụng phần trăm d.
Vì vậy, chúng tôi sẽ chỉ in ra các liên kết của ba
chuỗi này, phần trăm d và chúng tôi sẽ chỉ có một số khoảng trắng ở giữa và sau đó thêm
một nguồn cấp dữ liệu dòng.
Và đây sẽ chỉ là gọi hàm độ dài chuỗi cho mỗi
từ, khá đơn
giản ở đây, và thế là xong. Vì vậy, bây giờ chúng tôi có thể xây dựng và thử nghiệm và xem liệu điều này có thực sự hoạt động hay không.
Những gì chúng ta sẽ thấy dưới dạng đầu ra là chúng
ta sẽ thấy độ dài của Jason là 5, độ dài tạm được là 2 và độ dài
của bất cứ thứ gì có vẻ là khoảng 8.
Vì vậy, ở đây chúng ta có 5, 2 và 8, có vẻ đúng.
Vì vậy, đó là cách bạn có thể viết độ dài chuỗi. Hãy chuyển sang hàm nối.
Hàm nối sẽ
chỉ nhận ba chuỗi hai hằng số.
Và điều này sẽ không trả lại bất cứ điều gì. Nó sẽ chỉ đặt
chuỗi kết quả trong tham số đầu tiên.
Vì vậy, chúng tôi sẽ gọi nó là concat. Chúng ta sẽ có một
kết quả, và chúng ta sẽ có hai
chuỗi, một chuỗi mà chúng ta muốn nối hai và sau đó một chuỗi mà chúng
ta muốn chỉ có một chuỗi duy nhất. Vì vậy, chúng tôi sẽ đặt tên cho chuỗi một, chuỗi hai.
Và chúng ta bắt đầu. Và đó là khai báo hàm của chúng ta.
Vì vậy, chúng ta có thể sử dụng ở bất cứ đâu trước khi nó được định nghĩa.
Điều này cũng sẽ phải đi qua mảng. Nó chỉ sẽ phải đi qua hai mảng
và khi chúng ta đi qua từng mảng thêm vào chuỗi kết quả.
Chúng ta sẽ tạo một vài biến cục bộ mà chúng ta chỉ có thể sử dụng bên trong
hàm này, int I và j.
Và sau đó chúng ta sẽ sử dụng vòng
lặp for để đi qua mảng. Chúng ta sẽ nói với tôi bằng 0.
Str sub 1 hoặc sub mà tôi nên nói là không
bằng dấu chấm hết rỗng và
sau đó cũng tăng I.
Chúng ta đã quen thuộc với cú pháp vòng lặp
for của chúng ta, trong đó chúng ta có số nhận dạng vòng lặp là điều đầu tiên.
Trước dấu chấm phẩy đầu tiên, điều kiện mà chúng ta nhảy ra trước dấu chấm
phẩy thứ hai và sau đó
sửa đổi biến điều khiển vòng lặp để đảm bảo rằng chúng ta không có vòng lặp vô hạn.
Tất cả những gì chúng ta làm ở đây
là lưu kết quả, sub I bằng str một sub I.
Hãy nhớ rằng, đây là những ký tự vì vậy bạn hoàn toàn có thể sử dụng dấu bằng một phép gán ở đây.
Chúng tôi không thể làm điều
này trong mảng ký tự vì mảng ký tự bạn không thể gán mảng cho một mảng.
Chúng tôi sẽ phải sử dụng một bản sao str.
Vì vậy, đó là sao chép chuỗi đầu tiên.
Và bây giờ chúng ta muốn nối chuỗi thứ hai với kết quả,
vì vậy chúng ta sẽ làm một cái gì đó rất giống nhau ngoại trừ chúng ta sẽ
xem xét mảng thứ hai và chúng ta sẽ đảm bảo rằng chúng ta đặt nó vào đúng vị trí trong kết quả.
Vì vậy, chúng tôi sẽ làm một cái gì đó như thế này. Chúng ta sẽ đi từ
j đến 0, str đến j không bằng với giá trị kết thúc null ++ j.
Và bạn sẽ thấy kết quả là tôi chỉ cộng với j, vì vậy tôi đã kết thúc bằng gì.
Nếu tôi thêm mười ký tự, nó sẽ bắt
đầu từ ký tự thứ mười vì nó dựa trên 0 và nó
sẽ chỉ thêm j vào đó, vì vậy 10 cộng với 0, 10 cộng với 1, v.v.
Và đó là nó.
Một điều cuối cùng bạn phải làm thực sự quan trọng là bạn phải thêm dấu chấm hết null đó.
Vì vậy, chúng tôi muốn nói kết quả, tôi cộng với j và sau đó
thêm vào một ký tự duy nhất, dấu chấm hết
rỗng, là dấu gạch chéo ngược số 0 bên trong một dấu ngoặc kép.
Và đó là chức năng của chúng tôi.
Chúng ta không phải trả về bất cứ thứ gì từ
hàm này vì chúng ta chỉ đang sao chép trong str một đến str hai.
Vì vậy, hãy kiểm tra điều này.
Những gì tôi mong đợi có thể làm được trong phần này là thử nghiệm nó với một vài nhân vật.
Chúng tôi sẽ sử dụng các ký tự hiện có mà chúng tôi có, và chúng
tôi sẽ nối một vài ký tự.
Vì vậy, chúng ta cần tạo một
kết quả khác. Vì vậy, chúng tôi
sẽ chỉ nói kết quả chỉ để xóa nó.
Ở đây, chúng tôi sẽ nói rằng chúng
tôi sẽ phải chỉ định kích thước cho cái đầu tiên đó.
Và vì vậy chúng tôi sẽ chỉ định kích thước là 50. Chúng tôi sẽ hạn chế nó.
Vì vậy, các ký tự không đổi này sẽ hoạt động.
Bây giờ chúng ta sẽ nói printf, chúng
ta sẽ in ra một chuỗi.
Vì vậy, chúng tôi sẽ nói phần trăm s và sau đó chúng tôi sẽ nói concat, đó
là những gì chúng tôi đặt tên cho nó. Chúng ta sẽ chuyển kết quả
và sau đó là từ một và từ hai.
Vì vậy, những gì điều này sẽ hiển thị dưới dạng
đầu ra và chúng tôi sẽ đảm bảo rằng chúng tôi đặt nó trên một vài dòng mới.
Điều này sẽ hiển thị dưới dạng đầu ra Jason được. Vì vậy concat thực sự không trả về bất kỳ dữ liệu nào,
vì vậy tôi không thể đưa nó trực tiếp vào printf.
Những gì tôi phải làm là gọi nó và sau đó hiển thị kết quả.
Vì vậy, chúng tôi gọi là concat.
Mọi thứ được đưa vào kết quả và chúng tôi hiển thị kết quả.
Vì vậy, một lần nữa khi chúng tôi chạy điều này, chúng
tôi sẽ thấy Jason ổn và chúng tôi làm.
Hàm thứ ba mà chúng
tôi muốn thực hiện là một hàm so sánh để kiểm tra xem hai chuỗi có bằng nhau hay không.
Hàm này sẽ trả về một boolean.
Vì vậy, chúng tôi muốn bao gồm bool tiêu chuẩn của chúng tôi.
Vì vậy, chúng ta có thể sử dụng boolean và các giá trị true và false.
Và điều này thực sự sẽ được định nghĩa là các chuỗi bằng nhau.
Điều này sẽ lấy một mảng ký tự không đổi, s1 và một mảng khác
để kiểm tra xem hai chuỗi có
bằng nhau hay không.
Chỉ để đảm bảo rằng tôi đã bao gồm tiêu đề phù hợp, tôi sẽ cố gắng xây dựng
tiêu đề đó và tôi nghĩ tôi đã làm như vậy bởi vì vậy bây giờ tôi
có thể sử dụng từ khóa bool vì tôi đã bao gồm từ khóa này và tôi cũng có thể sử dụng true false.
Vì vậy, hãy thực hiện các chuỗi bằng nhau này.
Điều này sẽ thực sự giống nhau
chỉ là đi qua mảng và kiểm tra từng ký tự.
Vì vậy, chúng tôi sẽ tạo
một vài biến cục bộ mà tôi bằng 0 cho vòng lặp được khởi tạo 0 của chúng tôi.
Trong boolean, điều đó chỉ cho chúng ta biết liệu
chúng có bằng nhau hay không bởi vì đây là những gì chúng ta sẽ trả về, một cái gì đó giống như là bằng. Và chúng tôi thực sự có thể khởi tạo điều này thành false.
Điều chúng tôi muốn làm đầu tiên thực sự là chúng tôi muốn đếm.
Chúng tôi muốn xem cả hai điều này lớn
như thế nào. Vì vậy, chúng ta có thể có
một vòng lặp while vì chúng ta cần số lượng để xem kích
thước về cơ bản để chỉ kiểm
tra kết thúc null đó.
Vì vậy, chúng tôi sẽ giả định rằng các chuỗi mà chúng tôi truyền vào có cùng kích thước.
Vì vậy, chúng ta có thể viết một vòng lặp while đơn giản. Bạn cũng có thể viết câu lệnh if.
Tôi đã kết hợp mọi thứ vào một vòng
lặp while là so sánh của tôi bằng cách sử dụng các toán tử logic.
Bạn không cần phải sử dụng các toán tử logic. Bạn có thể sử dụng câu lệnh if và chỉ cần
xem qua toàn bộ chuỗi thứ hai.
Nhưng ở đây những gì tôi đã làm là tôi
đã nói trong khi s1 sub I bằng với
s2 sub I và chúng không bằng null terminators.
Bởi vì nếu chúng bằng với giá trị
kết thúc null, chúng tôi muốn nhảy ra nếu một trong hai người đó là dấu kết thúc null.
Vì vậy, bây giờ chúng ta nói cộng với tôi. Và sau đó, điều cuối cùng chúng ta phải làm là chỉ cần kiểm
tra xem đó có phải là các đầu cuối rỗng hay không. Và nếu đúng như vậy, bạn có thể đặt biến boolean
của mình để trả về đúng dữ liệu.
Vì vậy, ở đây chúng ta có thể nói nếu s1 sub
I bằng với một terminator null và s2
sub bằng null terminator, hãy đặt biến boolean của chúng ta là bằng
và sau đó chúng ta muốn trả về giá trị đó.
Và sau đó chỉ cần nói lợi nhuận là bằng.
Và để kiểm tra điều này, chúng ta sẽ phải kiểm tra một chuỗi tốt và một chuỗi xấu.
Vì vậy, chúng ta hãy tiếp tục và nói các chuỗi bằng nhau.
Tôi sẽ chỉ in ra giá trị nguyên của boolean, vì vậy phần trăm
d và chúng ta sẽ nói các chuỗi bằng nhau ở đây, điều này trả về một cái gì đó
để chúng ta có thể
đặt giá trị này trong biểu thức in bằng chuỗi. Tôi chỉ muốn đảm bảo các
chuỗi bằng nhau và
sau đó chúng ta sẽ chuyển Jason bằng dấu phẩy Jason.
Và chúng tôi sẽ gọi nó và lần này
chúng tôi sẽ nói là của Jason.
Và đầu tiên sẽ trả về một, thứ hai trả về 0,
một đại diện cho true, 0 đại diện cho sai.
Khi chúng tôi chạy điều này, chúng tôi thấy một
và không. Một cho true và zero cho false ngoại trừ
việc đọc rất khó vì chúng tôi không có nguồn cấp dữ liệu dòng. Vì vậy, hãy thêm một nguồn cấp dữ
liệu dòng và chỉ để hiển thị lại cho bạn.
Bây giờ chúng ta thấy một
số không, đúng sai. Jason Jason ngang tài ngang sức với nhau.
Jason của Jason không bằng.
Vì vậy, đây là một số hàm
nhanh mà bây giờ bạn có thể học, tìm hiểu cơ bản về mảng ký
tự và cách chuỗi được biểu diễn với khái niệm này.
Cảm ơn bạn. Tôi cũng sẽ cung cấp tệp nguồn để bạn có thể xem chi tiết hơn.
Hy vọng rằng điều này đã giúp ích cho bài tập của bạn.