>> ZAMYLA CHAN: Xin chúc mừng trên kết thúc của bạn
cặp vợ chồng đầu tiên của chương trình C.
Tôi biết rằng đột phá đầu tiên của bạn vào Cú pháp C có thể được khó khăn.
Nhưng tôi đảm bảo với bạn, ở cuối của Tất nhiên, bạn sẽ có thể nhìn vào
cặp vợ chồng đầu tiên của bài tập và hoàn thành chúng trong vài phút.
>> Bây giờ bạn đang nhận được quen thuộc hơn với cú pháp, chúng ta hãy cho Sê-sa.
Trong Caesar, người sử dụng sẽ nộp phím số nguyên như một dòng lệnh
lập luận, sau đó nhập vào một đồng bằng tin nhắn văn bản tại dấu nhắc.
Chương trình sau đó sẽ encipher các văn bản và in ấn
tin nhắn mã của họ.
>> Các enciphering cho Caesar khá đơn giản.
Chuyển từng từ, trong họ đồng bằng văn bản, bằng chìa khóa.
Kết quả là, nó cũng khá an toàn.
Nhưng thực hiện Caesar sẽ giới thiệu chúng tôi ASCIIMath và mảng dữ liệu
cấu trúc.
Chúng tôi sẽ nhận được phức tạp hơn mật mã sau.
Với một phím Caesar 2, chữ A trong đồng bằng văn bản sẽ được đại diện bởi
chữ C trong bản mã bởi vì C là hai chữ cái sau khi A. B sẽ
đại diện bởi D và C của E. Hướng tới cuối của bảng chữ cái, W là
đại diện bởi Y, và X của Z. Nhưng Y không có hai chữ cái sau nó, vì vậy
các thuật toán mã hóa kết thúc tốt đẹp xung quanh bảng chữ cái.
Y trong văn bản đơn giản là như vậy, đại diện bởi Một trong mã, và Z bởi B. Nó có thể
giúp đỡ để xem Caesar Cypher như một bánh xe bảng chữ cái liên tục.
>> Để encipher văn bản, người sử dụng sẽ bước vào hai đối số
vào dòng lệnh -
/ Caesar. Theo sau là một chìa khóa.
Như mọi khi, chúng ta không thể tin tưởng người sử dụng hoàn toàn vào đầu vào mà làm
ý nghĩa đối với chương trình của chúng tôi.
Vì vậy, chúng tôi sẽ phải xác nhận của họ đầu vào dòng lệnh.
>> Thay vì sử dụng int chính có hiệu lực, chúng tôi sử dụng int main, int argc, argv chuỗi.
Argc các biến số nguyên đại diện cho số lượng các đối số được truyền vào
dòng lệnh.
Và argv là một mảng, hoặc nghĩ về nó như một danh sách, các đối số thông qua nhập
>> Vì vậy, cho Caesar, làm thế nào để chúng tôi xác nhận đầu vào của người dùng?
Vâng, họ chỉ nên được vào hai đối số dòng lệnh -
. / Caesar và một phím.
Vì vậy, nếu argc không phải là 2, đó có nghĩa là họ hoặc là quên một chìa khóa và chỉ
nhập vào. / caesar, hoặc họ vào nhiều phím.
>> Nếu đây là trường hợp, sau đó bạn sẽ muốn in hướng dẫn
và thoát khỏi chương trình.
Họ sẽ cần phải thử lại từ dòng lệnh.
Nhưng ngay cả khi argc là 2, bạn sẽ cần phải kiểm tra xem họ
cung cấp cho bạn một khóa hợp lệ.
Cho Caesar, bạn cần một số nguyên.
Nhưng argv là một mảng của chuỗi.
Làm thế nào để bạn truy cập chính?
>> Hãy xem xét các mảng -
cấu trúc dữ liệu mà giữ nhiều giá trị của các kiểu dữ liệu.
Mục là không lập chỉ mục, có nghĩa là các yếu tố đầu tiên là chỉ số không
và yếu tố cuối cùng là ở kích thước chỉ mục trừ đi 1, nơi kích thước là số
phần tử trong mảng.
>> Nếu tôi tuyên bố một mảng chuỗi hộp thư mới chiều dài 3, trực quan, nó
trông như thế này.
Ba container cho chuỗi , Bên cạnh nhau.
Để truy cập vào bất kỳ yếu tố, bạn gõ tên của mảng và sau đó chỉ ra
các chỉ số trong dấu ngoặc vuông.
Ở đây, tôi gán giá trị cho mỗi phần tử, cũng giống như tôi sẽ làm gì với bất kỳ
biến chuỗi khác.
>> Vì vậy, để truy cập vào các dòng lệnh của chúng tôi, tất cả chúng ta phải làm là truy cập
các yếu tố bên phải của mảng argv.
Nếu người dùng nhập vào Nhóm / Blastoff. Tên lửa vào các thiết bị đầu cuối, argv 0 sẽ
được / Blastoff..
argv sẽ là đội, và arg2 sẽ là tên lửa.
>> Bây giờ chúng ta có thể truy cập chính của chúng tôi, chúng tôi vẫn cần phải thực hiện
chắc chắn rằng nó là chính xác.
Chúng ta cần phải chuyển đổi nó thành một số nguyên.
Nhưng chúng ta không thể bỏ như chúng tôi đã thực hiện trước đó.
May mắn thay, một chức năng Y chăm sóc điều này cho chúng ta và thậm chí trả về 0
nếu chuỗi không thể được chuyển đổi vào một số nguyên.
Nó thuộc vào bạn, tuy nhiên, để nói người sử dụng tại sao bạn sẽ không
để chương trình tiến hành.
Lưu trữ các kết quả của A đến Y trong một số nguyên, và ở đó bạn có chìa khóa của bạn.
Phần tiếp theo là đơn giản.
Nhắc nhở người dùng văn bản đơn giản của họ, đó sẽ là dữ liệu kiểu string.
May mắn cho chúng tôi, tất cả người sử dụng đầu vào dây là hợp lệ.
>> Bây giờ chúng ta có tất cả các đầu vào cần thiết từ người sử dụng, đó là thời gian để chúng tôi
encipher thông điệp của họ.
Các khái niệm về Caesar là đơn giản đủ để hiểu.
Nhưng làm thế nào máy tính của bạn biết thư đến sau khi một số khác?
>> Đây là nơi mà các bảng mã ASCII có in
Mỗi nhân vật có một số nguyên số liên kết với nó.
Vốn A là 65.
Vốn B là 66.
Chữ thường một là 97.
Chữ thường b là 98.
Nhưng nhân vật không giới hạn chỉ số chữ cái.
Ví dụ, biểu tượng @ ASCII là số 64.
>> Trước khi làm việc với toàn bộ chuỗi, chúng ta hãy giả vờ chúng ta phải thay đổi
một ký tự.
Vâng, chúng tôi chỉ muốn thay đổi thực tế chữ cái trong văn bản đơn giản, không
ký tự hoặc số.
Vì vậy, điều đầu tiên mà chúng ta sẽ muốn kiểm tra là liệu các nhân vật trong
bảng chữ cái.
>> Chức năng isalpha hiện điều này cho chúng tôi và trả về một Boolean -
đúng nếu các nhân vật là một bức thư, false nếu ngược lại.
Hai chức năng hữu ích khác isupper và islower, với
tên tự giải thích.
Họ trở về đúng nếu nhân vật được là chữ hoa hoặc chữ thường,
tương ứng.
Vì chúng là Boolean, họ hữu ích để sử dụng như điều kiện.
>> Nếu isalpha trả về đúng, bạn sẽ cần chuyển nhân vật bằng phím.
Vì vậy, hãy mở cửa cho ASCIIMath và làm một số toán học ASCII.
Việc sử dụng là rất tương tự như việc sử dụng cho Caesar và mất trong một phím ở
dòng lệnh.
>> Nếu tôi chạy ASCIIMath 5, có vẻ như để thêm 5 để một, đem lại cho tôi những thư e, và
hiển thị giá trị ASCII.
Vì vậy, chúng ta hãy nhìn vào chương trình.
>> Bạn có thể tự hỏi, ngay tại đây, tại sao thư là một số nguyên, khi đó là
rõ ràng, tốt, một lá thư.
Nó chỉ ra rằng nhân vật và số nguyên là hoán đổi cho nhau.
Bằng cách đặt các thư Một trong đơn dấu ngoặc kép, số nguyên có thể lưu trữ
giá trị ASCII của vốn A. Hãy cẩn thận, mặc dù.
Bạn cần những bộ quần áo duy nhất.
Không có dấu nháy đơn, các trình biên dịch sẽ tìm một biến
có tên là A, và không phải là nhân vật.
>> Sau đó tôi thêm thư và một chìa khóa, lưu trữ số tiền trong các biến kết quả int.
Mặc dù kết quả là các kiểu dữ liệu số nguyên, tuyên bố printf của tôi sử dụng
% C giữ chỗ cho các nhân vật.
Vì vậy, các chương trình in các nhân vật kết hợp với kết quả số nguyên.
Và vì chúng ta in các số nguyên hình thức cũng sử dụng% d, chúng ta thấy
số là tốt.
Vì vậy, bây giờ bạn có thể thấy rằng chúng tôi xử lý nhân vật và
số nguyên, và ngược lại.
>> Hãy kiểm tra ra ASCIIMath một vài lần sử dụng 25 như một chìa khóa.
Chúng tôi nhận được thư z.
Bây giờ chúng tôi cố gắng 26.
Chúng tôi muốn nhận được một lá thư, nhưng thay vào đó chúng ta có được một khung bên trái.
Vì vậy, rõ ràng, chỉ cần thêm chìa khóa để thư sẽ không làm.
Chúng tôi cần phải tìm ra một công thức để bọc xung quanh các bảng chữ cái, như của chúng tôi
Ví dụ trong đầu đã làm.
>> Một công thức của Caesar thay đổi như sau.
c bằng p cộng với k modulo 26.
Hãy nhớ rằng modulo là một hữu ích hoạt động cung cấp cho chúng tôi phần còn lại
phân chia một số của người kia.
Hãy áp dụng công thức này để đồng bằng thư văn bản với một phím 2.
Giá trị ASCII của y là 89, trong đó cho chúng ta 91 modulo 26,
bằng với 13 -
chắc chắn không phải là giá trị ASCII của một, mà là 67.
>> Hài hước tôi bây giờ và di chuyển ra khỏi Giá trị ASCII đến một chỉ số chữ cái
trong đó A là số không và Z là 25, có nghĩa là Y là 24.
24 cộng với 2, modulo 6, cho chúng ta 26, modulo 26, 0, đó là
chữ cái chỉ số của một.
Vì vậy, công thức này dường như áp dụng đối với các chữ cái chỉ số của các thư và
không giá trị ASCII của nó.
>> Nhưng bạn bắt đầu với giá trị ASCII.
Và in các ký tự mã, bạn sẽ cần giá trị ASCII của nó là tốt.
Nó thuộc vào bạn, sau đó, để tìm ra làm thế nào để chuyển đổi qua lại.
>> Khi bạn tìm ra công thức đúng cho một nhân vật, tất cả các bạn cần làm
được áp dụng cùng một công thức cho tất cả thư trong các văn bản đơn giản -
chỉ khi thư đó là chữ cái, tất nhiên.
Và hãy nhớ rằng bạn cần phải bảo quản trường hợp, trên hoặc dưới, đó là nơi
các isUpper và chức năng isLower đề cập trước đó sẽ có ích.
Bạn có thể có hai công thức -
một cho chữ hoa và một cho chữ thường.
Vì vậy, isUpper một isLower sẽ giúp bạn xác định công thức để áp dụng.
>> Làm thế nào để bạn áp dụng công thức của bạn cho mọi nhân vật duy nhất trong một chuỗi?
Vâng, một chuỗi chỉ là một mảng ký tự.
Vì vậy, bạn có thể truy cập mỗi nhân vật bằng cách nhóm hơn tất cả các nhân vật trong
chuỗi trong một vòng lặp.
Như cho tình trạng của bạn cho vòng lặp, chức năng strlen, cho chuỗi
chiều dài, sẽ có ích.
Phải mất trong một chuỗi như đầu vào và trả về độ dài của chuỗi đó.
Hãy chắc chắn bao gồm các thư viện phải sử dụng chức năng chiều dài chuỗi.
>> Và bạn đã có bản mã của bạn.
Tên tôi là Zamyla.
Và [NÓI CODE].