วิธีย้อนกลับสตริงในC

How Reverse String C



ในการเข้ารหัสสตริง การกลับรายการสตริงเป็นหัวข้อที่สำคัญ มีหลายวิธีในการย้อนกลับสตริง ซึ่งแต่ละวิธีมีตรรกะที่แตกต่างกัน บทความนี้จะแสดงให้คุณเห็นถึงวิธีการย้อนกลับสตริงอย่างถูกต้องเพื่อใช้วิธีการและการให้เหตุผลที่แตกต่างหลากหลายทั้งแบบที่มีและไม่ต้องใช้ฟังก์ชันที่กำหนดไว้ล่วงหน้า เมื่อใดก็ตามที่มีการใช้เทคนิคการย้อนกลับของเทคนิคสตริงในสตริงอินพุตที่ไม่ซ้ำกัน ข้อความที่ผู้บริโภคจะจัดหาในลำดับเฉพาะจะถูกย้อนกลับโดยสมบูรณ์ ในกรณีด้านล่าง มีการใช้ทางเลือกอื่นในการย้อนกลับสตริงด้วย C

เมื่อใช้คู่มือนี้ เรากำลังดำเนินการกับระบบ Ubuntu 20.04 Linux ที่กำหนดค่าบน Virtual Box ขณะทำงานบนระบบ Linux เราเคยติดตั้งและสืบค้นข้อมูลส่วนใหญ่บนเทอร์มินัลเชลล์ ดังนั้น ให้เปิดเทอร์มินัลเชลล์ด้วยปุ่มลัด Ctrl+Alt+T หรือค้นหาผ่านแถบค้นหาของแอปพลิเคชันภายใต้พื้นที่กิจกรรมของเดสก์ท็อป Ubuntu จำเป็นต้องอัปเดตระบบของคุณก่อนผ่านการสืบค้น apt update ระบบจะถามรหัสผ่านผู้ใช้ปัจจุบันเพื่อเรียกใช้การอัปเดต ดังนั้นให้เพิ่มรหัสผ่านแล้วกดปุ่ม Enter







$ sudo apt update



เนื่องจากเราใช้ภาษาซีเพื่ออธิบายแนวคิดของการย้อนกลับสตริงในระบบ Ubuntu 20.04 เราจึงควรติดตั้งคอมไพเลอร์ C ไว้ในระบบอูบุนตู ดังนั้น ตรวจสอบให้แน่ใจว่าได้ติดตั้งคอมไพเลอร์ GCC บนระบบของคุณผ่านแบบสอบถามด้านล่าง



$ sudo apt ติดตั้ง gcc

ตัวอย่าง 01: การใช้ For Loop

หลังจากติดตั้งและกำหนดค่าคอมไพเลอร์ GCC และอัปเดตแพ็คเกจ apt จะสร้างไฟล์ใหม่ ไฟล์นี้ควรเป็นประเภท C; ดังนั้นให้ใช้คำสั่งสัมผัสเพื่อสร้างไฟล์ new.c ดังต่อไปนี้ ไฟล์นี้จะถูกใช้ในโค้ดของเราตั้งแต่นี้ไประหว่างการใช้งานโปรแกรมสตริงย้อนกลับ





$ สัมผัสใหม่

ตอนนี้คุณสามารถเปิดไฟล์นี้เพื่อแก้ไขหรือเขียนโค้ดโดยตัวแก้ไข Nano ที่ติดตั้งมากับระบบ Ubuntu 20.04 Linux ของคุณ ดังนั้น ให้ลองทำตามคำแนะนำด้านล่างในเชลล์ของคุณ



$ นาโนใหม่

ไฟล์ประเภท C ที่สร้างขึ้นใหม่ได้ถูกเปิดขึ้นใน GNU Nano Editor ของระบบ Ubuntu 20.04 คุณต้องเขียนสคริปต์ C ดังที่แสดงในภาพหน้าจอด้านล่าง ให้เราอธิบายโค้ดนี้อย่างละเอียดเพื่อให้คุณเข้าใจมากขึ้น ในตอนต้นของรหัส เราได้รวมไลบรารีสองไลบรารี ไลบรารี stdio.h ถูกใช้เพื่อรับอินพุตและแสดงเอาต์พุต และไลบรารี string.h อื่นๆ ถูกใช้เพื่อใช้สตริงทุกประเภทในโค้ดของเรา งานทั้งหมดของการย้อนกลับสตริงจะทำในวิธี main() ของรหัส C เราได้ประกาศสตริงประเภทอักขระ str ที่มีขนาด 50 ซึ่งหมายความว่าสตริงที่มีอักขระมากกว่า 50 ตัวไม่สามารถเล่นได้ในโค้ดนี้ หลังจากนั้น เราได้ประกาศตัวแปรประเภทจำนวนเต็มสองตัว ตัวแปร l ถูกใช้เพื่อรวบรวมความยาวของสตริง str และตัวแปร I จะถูกใช้เป็นตัวเริ่มต้นใน for loop จากนั้นเราใช้คำสั่ง printf เพื่อพิมพ์ข้อความบนเชลล์ Enter string เพื่อบอกให้ผู้ใช้เพิ่มค่าให้กับตัวแปรสตริง มีการใช้เมธอด scanf() เพื่อป้อนผู้ใช้ในขณะใช้งานและบันทึกค่านั้นลงในสตริง str ฟังก์ชัน strlen() ถูกใช้เพื่อตรวจสอบความยาวของสตริง str ที่เพิ่มโดยผู้ใช้ในขณะรันไทม์และบันทึกลงในตัวแปร l' จากนั้นเราเริ่มต้น a for loop เพื่อย้อนกลับสตริง str คุณจะเห็นว่าตัวเริ่มต้น I' กำลังรับค่าจากตัวแปร l เพื่อย้อนกลับทิศทางของสตริง จากนั้นจะพิมพ์อักขระของสตริง str 'ทีละรายการ สุดท้ายวิธีการหลักได้สิ้นสุดลงแล้ว บันทึกไฟล์นี้โดยใช้ Ctrl+S และออกจากไฟล์โดยใช้ Ctrl+X

ตอนนี้ได้เวลารวบรวมโค้ดและตรวจสอบผลลัพธ์แล้ว ดังนั้นการคอมไพล์จึงทำได้โดยเคียวรี gcc ที่ระบุด้านล่างด้วยชื่อไฟล์ new.c

$ gcc ใหม่

เมื่อคอมไพล์สำเร็จ แสดงว่าโค้ดของเราไม่มีข้อผิดพลาด มารันไฟล์ของเราโดยใช้แบบสอบถาม a.out ในเชลล์ดังนี้:

$./ถึง.ออก

ขั้นตอนการดำเนินการจะขอให้ผู้ใช้เพิ่มสตริง เราได้เพิ่ม I-Am-Aqsa-Yasin และกด Enter คุณสามารถเห็นการย้อนกลับของสตริงที่บรรทัดต่อไปนี้

ตัวอย่าง 02: การใช้การสลับ

ในตัวอย่างนี้ เราจะใช้วิธีการสลับเพื่อกลับลำดับของสตริง ดังนั้นเปิดไฟล์ new.c อีกครั้งโดยใช้โปรแกรมแก้ไขนาโนดังนี้:

$ นาโนใหม่

ตอนนี้ไฟล์ถูกเปิดในโปรแกรมแก้ไข GNU nano แล้ว เราจำเป็นต้องอัปเดตไฟล์โค้ดด้วยสคริปต์ที่แสดงด้านล่างในภาพหน้าจอ เราได้รวมไฟล์ส่วนหัวอินพุตและเอาต์พุตมาตรฐานไว้ในโค้ดของเราก่อนโดยใช้คำหลัก #include เราได้กำหนดวิธีการ Reverse() ตามการใช้งานของเทคนิคการสลับ เราได้เริ่มต้นตัวแปรประเภทจำนวนเต็มสามตัว ใหม่, ฉัน และ สลับ ตัวแรกสำหรับลูปใช้เพื่อตรวจสอบว่าสตริง s ว่างหรือไม่ ลูปถัดไปใช้สำหรับวนซ้ำ และในเนื้อหา เราได้สลับค่าโดยใช้ตัวแปรใหม่และสลับ เป็นที่น่าสังเกตว่าการย้อนกลับสตริงที่มีความยาว n นั้นใช้เวลาเพียง n/2 รอบ เมื่อสลับสตริงแล้ว คุณจะต้องวนซ้ำอีกครั้งเพื่อแสดงสตริงที่ย้อนกลับ ซึ่งเราทำในแอปพลิเคชันของเราโดยใช้สตริงที่สามสำหรับลูป ต้องเรียกใช้ฟังก์ชัน Reverse() จากภายในโปรแกรมหลัก คุณได้ระบุว่าซอฟต์แวร์ของคุณทำงานอย่างไรกับ printf ภายในบริบทของ main() หลังจากนั้น คุณใช้ scanf() เพื่อรับอินพุตของผู้ใช้และเรียกใช้เมธอด Reverse() ตอนนี้ให้บันทึกไฟล์อีกครั้งโดยใช้ Ctrl+S และออกจากโปรแกรมแก้ไข nano โดยใช้ปุ่มลัด Ctrl+X แล้วกลับไปที่เทอร์มินัลเชลล์

รวบรวมรหัสก่อนโดยแบบสอบถาม gcc ดังต่อไปนี้

$ gcc ใหม่

ตอนนี้รันไฟล์โค้ดโดยใช้คำสั่ง ./a.out เดียวกัน

$./ถึง.ออก

มันจะขอให้คุณป้อนค่าสตริง เราได้เพิ่ม AqsaYasin และย้อนกลับ

ตัวอย่าง 03: การใช้การเรียกซ้ำ

ในตัวอย่างนี้ เราจะใช้การเรียกซ้ำเพื่อย้อนกลับสตริงที่เพิ่มโดยผู้ใช้ จึงเปิดไฟล์อีกครั้ง

$ นาโนใหม่

โปรแกรมนี้พิมพ์ Enter a sentence: จากนั้นใช้เมธอด Reverse() อักษรตัวแรกที่ป้อนโดยผู้ใช้จะถูกบันทึกไว้ใน c ด้วยวิธีนี้ Reverse() จะดำเนินการอีกครั้งหากอาร์กิวเมนต์เป็นอย่างอื่นที่ไม่ใช่ (ขึ้นบรรทัดใหม่) ขั้นตอนนี้จะดำเนินต่อไปจนกว่าผู้ใช้จะกดปุ่ม Enter เมื่อใดก็ตามที่ผู้ใช้กด Enter เมธอด Reverse() จะพิมพ์ข้อความในลำดับที่กลับกัน บันทึกและปิดไฟล์

คอมไพล์โค้ดก่อนแล้วรันโดยใช้คำสั่งก่อนหน้านี้ดังนี้:

$ gcc ใหม่

$./ถึง.ออก

คุณจะเห็นว่าผู้ใช้รับข้อมูลจากผู้ใช้เป็นประโยคสตริงทั้งหมด จากนั้นจึงเปลี่ยนลำดับของประโยคนั้น

บทสรุป:

สุดท้าย เราได้ทำสามตัวอย่างเพื่ออธิบายรายละเอียดเกี่ยวกับการย้อนกลับอินพุตประเภทสตริงด้วยวิธีการต่างๆ เช่น การใช้ for loop การใช้การเรียกซ้ำ และการใช้ swap