ZAMYLA CHAN: ขอแสดงความยินดี เมื่อจบของคุณ คู่แรกของโปรแกรม C ฉันรู้ว่าการโจมตีครั้งแรกของคุณให้เป็น ไวยากรณ์ C สามารถ daunting แต่ผมยืนยันกับคุณได้ในตอนท้ายของ แน่นอนคุณจะสามารถมองไปที่ คู่แรกของการมอบหมายงานและ ให้พวกเขาในไม่กี่นาที ตอนนี้ที่คุณได้รับคุ้นเคยมากกว่า กับไวยากรณ์, ขอได้ที่ซีซาร์ ในซีซาร์ผู้ใช้จะส่ง ที่สำคัญจำนวนเต็มเป็นบรรทัดคำสั่ง อาร์กิวเมนต์แล้วใส่ธรรมดา ข้อความที่รวดเร็ว โปรแกรมก็จะเปลี่ยนเป็นรหัส ข้อความและพิมพ์ ข้อความไซเฟอร์เท็กซ์ของพวกเขา เข้ารหัสสำหรับซีซาร์ ค่อนข้างง่าย เลื่อนตัวอักษรแต่ละตัวในของพวกเขา ข้อความธรรมดาโดยที่สำคัญ ผลที่ตามมาก็ยังมี สวยไม่ปลอดภัย แต่การดำเนินการของซีซาร์จะแนะนำ เรากับข้อมูล ASCIIMath และอาร์เรย์ โครงสร้าง เราจะได้รับความซับซ้อนมากขึ้น ยันต์ภายหลัง กับซีซาร์สำคัญของ 2 ตัวอักษรใน ข้อความธรรมดาจะได้รับการแสดงโดย C ตัวอักษรใน ciphertext เพราะ C เป็นตัวอักษรสองตัวหลังจาก A. B จะเป็น แสดงโดย D และ C โดยอีต่อ ในตอนท้ายของตัวอักษร, W คือ แทนด้วย Y และ X โดย Z. แต่ Y ไม่ได้มีตัวอักษรสองตัวหลังจากที่มันดังนั้น ยันต์พันรอบตัวอักษร Y ในข้อความธรรมดาจึงเป็นตัวแทนโดย ใน ciphertext และ Z โดย B. มันอาจ ช่วยในการดูซีซาร์ศูนย์เช่น ล้อตัวอักษรอย่างต่อเนื่อง หากต้องการเปลี่ยนเป็นรหัสข้อความที่ผู้ใช้ของพวกเขา จะเข้าสู่สองอาร์กิวเมนต์ เป็นบรรทัดคำสั่ง - . / ซีซาร์ตามด้วยที่สำคัญ เช่นเคยเราไม่สามารถไว้วางใจของผู้ใช้ อย่างสมบูรณ์เพื่อป้อนที่ทำให้ ความรู้สึกสำหรับโปรแกรมของเรา ดังนั้นเราจะมีการตรวจสอบของพวกเขา ป้อนบรรทัดคำสั่ง แทนการใช้เป็นโมฆะหลัก int เราไม่ ใช้ int หลัก int argc, argv สตริง argc ตัวแปรจำนวนเต็มแทน จำนวนอาร์กิวเมนต์ที่ผ่านเข้ามา บรรทัดคำสั่ง และ argv เป็นอาร์เรย์หรือคิดว่ามันเป็น รายการของอาร์กิวเมนต์ผ่านระบบ ดังนั้นสำหรับซีซาร์ทำอย่างไรเราจะตรวจสอบ การป้อนข้อมูลของผู้ใช้? ดีที่พวกเขาควรจะเข้ามา สองอาร์กิวเมนต์บรรทัดคำสั่ง - . / ซีซาร์และที่สำคัญ ดังนั้นถ้าไม่ได้เป็น argc 2 ว่าหมายความว่า พวกเขาอาจลืมกุญแจและเพียงแค่ ป้อน. / ซีซาร์หรือพวกเขา เข้ามาหลายคีย์ หากเป็นกรณีนี้แล้วคุณจะ ต้องการพิมพ์คำแนะนำ และออกจากโปรแกรม พวกเขาจะต้องลองอีกครั้ง จากบรรทัดคำสั่ง แต่ถึงแม้ว่า argc เป็น 2 คุณจะ จำเป็นต้องตรวจสอบว่าพวกเขา ให้คุณคีย์ที่ถูกต้อง สำหรับซีซาร์คุณจะต้องเป็นจำนวนเต็ม แต่ argv เป็นอาร์เรย์ของสตริง คุณจะเข้าถึงที่สำคัญที่ได้อย่างไร ดูอย่างรวดเร็วที่อาร์เรย์ - โครงสร้างข้อมูลที่ถือหลาย ค่าของชนิดข้อมูลเดียวกัน คอมเมนต์เป็นศูนย์จัดทำดัชนีหมายความว่า องค์ประกอบแรกเป็นศูนย์ดัชนี และสุดท้ายคือองค์ประกอบที่มีขนาดดัชนี ลบ 1 ที่ขนาดคือจำนวนของ องค์ประกอบในอาร์เรย์ ถ้าผมประกาศให้เป็นสตริงกล่องจดหมายใหม่อาร์เรย์ ความยาว 3, สายตามัน ลักษณะเช่นนี้ สามภาชนะบรรจุสตริง เคียงข้าง ในการเข้าถึงองค์ประกอบใด ๆ ที่คุณพิมพ์ชื่อ ของอาร์เรย์แล้วระบุ ดัชนีในวงเล็บ นี่ฉันกำหนดค่าให้กับแต่ละ องค์ประกอบเช่นเดียวกับที่ฉันจะทำอย่างไรกับการใด ๆ ตัวแปรสตริงอื่น ๆ ดังนั้นในการเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งของเรา ทั้งหมดที่เราต้องทำคือการเข้าถึง องค์ประกอบทางด้านขวาของอาร์เรย์ argv ถ้าผู้ใช้ป้อนทีม. Blastoff / จรวดเข้าไปในอาคารที่จะ argv 0 เป็น. / Blastoff argv จะเป็นทีมและ arg2 จะเป็นจรวด ตอนนี้ที่เราสามารถเข้าถึงสำคัญของเรา, เรายังคงต้องให้ แน่ใจว่ามันถูกต้อง เราจำเป็นต้องแปลงเป็นจำนวนเต็ม แต่เราไม่สามารถโยนเช่นเดียวกับ ที่เราเคยทำก่อนหน้านี้ โชคดีกับการทำงาน Y ดูแล นี้สำหรับเราและแม้กระทั่งกลับ 0 ถ้าสตริงไม่สามารถแปลง เป็นจำนวนเต็ม มันขึ้นอยู่กับคุณ แต่เพื่อที่จะบอก ผู้ใช้ทำไมคุณจะไม่ ให้โปรแกรมดำเนินการต่อไป ผลจากการจัดเก็บเป็น Y ใน จำนวนเต็มและมีคุณมีคีย์ของคุณ ส่วนถัดไปเป็นเรื่องง่าย แจ้งให้ผู้ใช้สำหรับข้อความธรรมดาของพวกเขา, ซึ่งจะเป็นของสตริงชนิดข้อมูล โชคดีสำหรับเราทั้งหมดของผู้ใช้ป้อน สตริงที่ถูกต้อง ตอนนี้เรามีป้อนข้อมูลทั้งหมดที่จำเป็น จากผู้ใช้ก็ถึงเวลาที่เราจะ เปลี่ยนเป็นรหัสข้อความของพวกเขา แนวคิดของซีซาร์เป็นเรื่องง่าย พอที่จะเข้าใจ แต่เครื่องคอมพิวเตอร์ของคุณวิธีการที่ไม่ทราบว่า จดหมายมาหนึ่งหลังจากที่อื่นได้หรือไม่ ในที่นี้ตาราง ASCII มา ตัวละครทุกตัวมีจำนวนเต็ม จำนวนที่เกี่ยวข้องกับมัน ทุนคือ 65 ทุน B เป็น 66 ตัวพิมพ์เล็กเป็น 97 b ตัวพิมพ์เล็กเป็น 98 แต่ตัวอักษรไม่ จำกัด เพียงแค่ตัวเลขตัวอักษร ตัวอย่างเช่นสัญลักษณ์ @ 64 จำนวน ASCII เป็น ก่อนที่จะจัดการกับสตริงทั้ง, ให้แกล้งเราก็ต้องเปลี่ยน ตัวละครตัวหนึ่ง ดีเราเพียงต้องการที่จะเปลี่ยนที่เกิดขึ้นจริง ตัวอักษรในข้อความธรรมดาไม่ได้ ตัวอักษรหรือตัวเลข ดังนั้นสิ่งแรกที่เราจะต้องการ ตรวจสอบว่าเป็นตัวละครที่อยู่ใน ตัวอักษร isalpha ฟังก์ชั่นไม่นี้สำหรับ เราและผลตอบแทนแบบบูล - จริงถ้าตัวอักษรที่เป็นตัวอักษร, เท็จถ้าเป็นอย่างอื่น สองฟังก์ชันที่มีประโยชน์อื่น ๆ isupper และ islower ด้วย ชื่ออธิบายตนเอง พวกเขากลับจริงถ้าตัวอักษรที่กำหนด เป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก, ตามลำดับ เนื่องจากพวกเขาเป็นบูลีนที่พวกเขากำลัง มีประโยชน์ในการใช้เป็นเงื่อนไข ถ้า isalpha ผลตอบแทนจริงคุณจะต้อง ที่จะเปลี่ยนโดยตัวอักษรที่สำคัญ ดังนั้นขอเปิด ASCIIMath และทำบางคณิตศาสตร์ ASCII การใช้งานจะคล้ายกับการใช้งาน สำหรับซีซาร์และใช้เวลาในกุญแจสำคัญที่ บรรทัดคำสั่ง หากฉันใช้ ASCIIMath 5 ดูเหมือนว่าจะเพิ่ม 5 ถึงให้ฉันฉจดหมายและ แสดงค่า ASCII ดังนั้นลองมาดูที่โปรแกรม คุณอาจสงสัยว่าที่นี่ทำไม ตัวอักษรเป็นจำนวนเต็มเมื่อมัน อย่างเห็นได้ชัดทั้งตัวอักษร แต่กลับกลายเป็นว่าตัวอักษรและ จำนวนเต็มสามารถใช้แทนกัน โดยการใส่ตัวอักษรในหนึ่งเดียว เครื่องหมายคำพูดจำนวนเต็มสามารถเก็บ ค่า ASCII ของเงินทุน A. ระวังแม้ว่า คุณจำเป็นต้องมีเสื้อผ้าเดียว โดยไม่ใส่เครื่องหมายคำพูดเดียว, คอมไพเลอร์จะมองหาตัวแปร ชื่อและตัวอักษรไม่ได้ แล้วฉันจะเพิ่มตัวอักษรและที่สำคัญการจัดเก็บ ผลรวมในผลตัวแปร int ถึงแม้ว่าผลจะมีชนิดของข้อมูล จำนวนเต็มคำสั่ง printf ฉันใช้ ตัวยึด% c สำหรับตัวอักษร ดังนั้นโปรแกรมจะพิมพ์ตัวอักษร ที่เกี่ยวข้องกับผลจำนวนเต็ม และตั้งแต่ที่เราพิมพ์จำนวนเต็ม รูปแบบเช่นกันโดยใช้% d เราจะเห็น จำนวนเช่นกัน ดังนั้นตอนนี้คุณจะเห็นว่าเรา รักษาตัวอักษรและ จำนวนเต็มและโอละพ่อ ลองทดสอบออก ASCIIMath ไม่กี่ ครั้งเพิ่มขึ้นโดยใช้ 25 เป็นคีย์ เราได้รับจดหมาย z ตอนนี้เราพยายามที่ 26 เราต้องการที่จะได้รับจดหมายฉบับหนึ่ง แต่ แทนเราได้รับวงเล็บซ้าย ดังนั้นเห็นได้ชัดเพียงการเพิ่ม กุญแจสำคัญในการตัวอักษรจะไม่ทำ เราต้องคิดออกสูตรการห่อ รอบตัวอักษรเหมือนของเรา ตัวอย่างเช่นในการเริ่มต้นทำ สูตรของซีซาร์ การเปลี่ยนแปลงมีดังนี้ คเท่ากับพีพลัส K แบบโมดูโล 26 โปรดจำไว้ว่าแบบโมดูโลเป็นประโยชน์ การดำเนินงานที่ทำให้เรามีส่วนที่เหลือ การแบ่งจำนวนหนึ่งโดยอื่น ๆ ลองใช้สูตรนี้ธรรมดา ตัวอักษรข้อความที่มีสำคัญของ 2 ค่า ASCII ของ y คือ 89 ซึ่ง ทำให้เรามี 91 แบบโมดูโล 26, ซึ่งเท่ากับ 13 - ไม่แน่นอนค่า ASCII ของซึ่งเป็น 67 อารมณ์ขันฉันตอนนี้และย้ายออกจาก ค่า ASCII ที่ดัชนีเรียงตามตัวอักษร ที่เป็นศูนย์และ Z คือ 25, หมายความว่า Y คือ 24 24 บวก 2, 6 แบบโมดูโลทำให้เรามี 26, โมดูโล 26, 0 ซึ่งเป็น ดัชนีตามตัวอักษร ดังนั้นสูตรนี้ดูเหมือนว่าจะนำไปใช้กับ ดัชนีตามตัวอักษรของตัวอักษรและ ไม่ได้ค่า ASCII ของ แต่คุณเริ่มต้นด้วยค่า ASCII และในการพิมพ์ตัวอักษรไซเฟอร์เท็กซ์ คุณจะต้องค่า ASCII ของตนเช่นกัน มันขึ้นอยู่กับคุณแล้วที่จะคิดออก วิธีการสลับไปมา เมื่อคุณคิดออกสูตรที่เหมาะสม สำหรับตัวละครตัวหนึ่งทั้งหมดที่คุณต้องทำ มีการใช้สูตรเดียวกันทุก ตัวอักษรในข้อความธรรมดา - เฉพาะในกรณีที่ตัวอักษรที่เป็นตัวอักษร แน่นอน และจำไว้ว่าคุณจำเป็นที่จะต้องรักษา กรณีที่บนหรือล่างที่ที่ isUpper และฟังก์ชั่ isLower กล่าวก่อนหน้านี้จะมาในสะดวก คุณอาจมีสองสูตร - หนึ่งสำหรับตัวอักษรพิมพ์ใหญ่ และสำหรับตัวพิมพ์เล็ก ดังนั้น isUpper isLower จะช่วยให้คุณ กำหนดสูตรที่จะใช้ คุณไม่ใช้สูตรของคุณวิธีการทุก ตัวเดียวในสตริง? ดีสตริงเป็นเพียง อาร์เรย์ของตัวอักษร เพื่อให้คุณสามารถเข้าถึงตัวละครแต่ละตัวโดย การจัดกลุ่มกว่าตัวละครในทุก สตริงในสำหรับวง สำหรับสภาพของคุณสำหรับวง, ฟังก์ชัน strlen สำหรับสตริง ความยาวจะมาในสะดวก มันต้องใช้เวลาในสตริงเป็น input และ ผลตอบแทนที่ได้ความยาวของสตริงที่ ให้แน่ใจว่าจะรวมถึงห้องสมุดขวา ที่จะใช้ฟังก์ชั่นความยาวสตริง และมีคุณมีของคุณ ciphertext ชื่อของฉันคือ Zamyla และ [รหัสการพูด]