แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | Array ตัวละคร | เชือก |
---|---|---|
ขั้นพื้นฐาน | อาร์เรย์อักขระคือชุดของตัวแปรของชนิดข้อมูลอักขระ | สตริงเป็นคลาสและตัวแปรของสตริงเป็นวัตถุของคลาส "สตริง" |
วากยสัมพันธ์ | ถ่าน array_name [ขนาด]; | สตริง string_name; |
การจัดทำดัชนี | อักขระแต่ละตัวในอาร์เรย์อักขระสามารถเข้าถึงได้โดยดัชนีในอาร์เรย์ | ในสตริงอักขระเฉพาะสามารถเข้าถึงได้โดยฟังก์ชัน "string_name.charAt (index)" |
ประเภทข้อมูล | อาร์เรย์อักขระไม่ได้กำหนดประเภทข้อมูล | สตริงกำหนดประเภทข้อมูลใน C ++ |
ผู้ประกอบการ | ผู้ประกอบการใน C ++ ไม่สามารถใช้กับอาเรย์อักขระได้ | คุณสามารถใช้ตัวดำเนินการ C ++ มาตรฐานกับสตริง |
เขตแดน | ขอบเขตของอาเรย์นั้นเกินขอบเขตอย่างง่ายดาย | เขตแดนจะไม่ย่ำยี |
ทางเข้า | เข้าถึงได้อย่างรวดเร็ว | เข้าถึงช้า |
นิยามของ Character Array
อาร์เรย์อักขระคือชุดของตัวแปรของ "char" ประเภทข้อมูล; มันอาจเป็นอาร์เรย์หนึ่งมิติหรืออาร์เรย์สองมิติ มันจะเรียกว่า "สตริงสิ้นสุดด้วย null" อาร์เรย์อักขระคือลำดับของอักขระที่เก็บไว้ในที่อยู่หน่วยความจำติดต่อกัน ในอาร์เรย์อักขระอักขระเฉพาะสามารถเข้าถึงได้โดยดัชนี “ ตัวอักษร Null” ยุติอาร์เรย์อักขระ”
ลองมาดูตัวอย่างชุดตัวอักษร: -
char name [] = {'A', 'j', 'a', 'y', '\ 0'}; หรือชื่อ char [] = "Ajay";
ที่นี่ "ถ่าน" เป็นชนิดข้อมูลตัวอักษร "ชื่อ" เป็นชื่อตัวแปรของอาร์เรย์อักขระ ฉันได้แสดงสองวิธีในการเริ่มต้นอาร์เรย์อักขระ ในวิธีแรกนั้น null จะถูกกล่าวถึงอย่างชัดเจนและในวิธีที่สองคอมไพเลอร์จะแทรก null โดยอัตโนมัติ
จุดสิ้นสุดของสตริงมักจะเป็นอักขระที่ไม่มีค่าเสมอ มันเป็นตัวละครที่สิ้นสุดของอาร์เรย์ตัวละคร อาร์เรย์อักขระไม่ใช่ชนิดข้อมูลในตัว เราสร้างอาร์เรย์อักขระโดยการประกาศ คุณไม่สามารถใช้โอเปอเรเตอร์มาตรฐานกับอาเรย์อักขระได้ ในการใช้งานอาเรย์อักขระมีฟังก์ชันในตัวเช่น, (strlen (), strlwr (), strupr (), strcat ()) เนื่องจากตัวดำเนินการมาตรฐานไม่สามารถใช้กับอาร์เรย์อักขระได้จึงไม่สามารถมีส่วนร่วมในนิพจน์ใด ๆ ได้
ตัวชี้อักขระไปยังอาร์เรย์อักขระสามารถสร้างได้
ลองมาทำความเข้าใจกับตัวอย่าง
char s1 [] = "สวัสดี"; ถ่าน s2 [] = "ท่าน"; s1 = s1 + s2; // ผู้ประกอบการผิดพลาดไม่สามารถใช้ s2 = s1; // ข้อผิดพลาดตัวชี้อักขระถ่าน * s = "เช้า"; ถ่าน * p; p = s; // รัน
ในตัวอย่างข้างต้นเราได้ประกาศอาร์เรย์อักขระสองตัว s1, s2 และตัวชี้อักขระสองตัว s และ p อักขระอาร์เรย์ s1 และ s2 ถูกเตรียมใช้งานเราจะเห็นว่าทั้งตัวดำเนินการเพิ่ม (+) และตัวดำเนินการกำหนดไม่ทำงานในอาร์เรย์อักขระ แต่สามารถกำหนดตัวชี้อักขระให้กับตัวชี้อักขระอื่นได้
โปรดจำไว้ว่าเมื่อเริ่มต้นอาร์เรย์อักขระจะไม่สามารถเริ่มต้นได้อีกครั้งกับชุดอักขระอื่น การเข้าถึงอาร์เรย์อักขระหรือสตริงที่สิ้นสุดด้วยค่า null นั้นรวดเร็วเมื่อเปรียบเทียบกับสตริงใน C ++
คำจำกัดความของ String
สตริงไม่ใช่ชนิดข้อมูลในตัวของ C ++ มันเป็นวัตถุชั้นเรียนประเภท "สตริง" ในการสร้างคลาส C ++ เหมือนกับการสร้าง“ ประเภท” คลาส“ string” เป็นส่วนหนึ่งของไลบรารี C ++ มันถือชุดของตัวละครหรืออาร์เรย์ตัวละครโดยรวม มีเหตุผลสามประการที่อยู่เบื้องหลังการพัฒนาคลาสสตริงมาตรฐาน
- อันดับแรก คือ "ความสอดคล้อง" อาร์เรย์อักขระไม่ใช่ชนิดข้อมูลในสิทธิ์ของตนเอง
- ประการที่สอง คือ "ความสะดวกสบาย" คุณไม่สามารถใช้ตัวดำเนินการมาตรฐานกับอาเรย์อักขระได้
- ข้อที่สาม คือ“ ความปลอดภัย” ขอบเขตของอาเรย์นั้นมีค่ามากกว่า
ให้เราเข้าใจสตริงด้วยตัวอย่าง
สตริง s1; s1 = "สวัสดี"; สตริง s2 ("อรุณสวัสดิ์"); string s3 = "Hennery"; สตริง s4;
ในการประกาศข้างต้นตัวแปรสตริงหรือวัตถุสี่รายการ (s1, s2, s3, s4) จะถูกประกาศ ในการประกาศข้างต้นฉันได้แสดงสามวิธีในการเริ่มต้นสตริง สตริง s1 ถูกประกาศจากนั้นเริ่มต้นแยกกัน สตริง s2 ถูกเตรียมใช้งานโดยตัวสร้างของคลาส“ String” สตริง s3 ถูกเตรียมใช้งานในเวลาที่ประกาศเป็นชนิดข้อมูลปกติทำ เราสามารถใช้โอเปอเรเตอร์มาตรฐานกับตัวแปรสตริงได้
s4 = s1; // การกำหนดสตริงวัตถุหนึ่งให้กับอีก s4 = s1 + s2; // เพิ่มสองสตริงและเก็บผลลัพธ์ในสตริงที่สามถ้า (s3> s2) // เปรียบเทียบสองสตริง s5 (s1); การสร้างวัตถุสตริงใหม่โดยใช้วัตถุสตริงที่มีอยู่
ในรหัสข้างต้นผู้ประกอบการต่างๆจะนำไปใช้กับสตริงและการดำเนินการต่างๆจะดำเนินการ คำสั่งแรกคัดลอกวัตถุสตริงหนึ่งไปยังวัตถุสตริงอื่น ในคำสั่งที่สองสตริงสองตัวจะถูกต่อกันและเก็บไว้ในสตริงที่สาม ในคำสั่งที่สามมีการเปรียบเทียบสองสตริง ในคำสั่งที่สี่วัตถุสตริงใหม่จะถูกสร้างขึ้นโดยใช้วัตถุสตริงที่มีอยู่แล้ว
การเข้าถึงสตริงช้ากว่าเมื่อเปรียบเทียบกับอาร์เรย์อักขระหรือสตริงที่สิ้นสุดด้วยค่า null
ความแตกต่างที่สำคัญระหว่างชุดอักขระและสตริง
- อาร์เรย์อักขระคือชุดของตัวแปรที่เป็นประเภทข้อมูลอักขระ String เป็นคลาสที่สร้างอินสแตนซ์เพื่อประกาศสตริง
- การใช้ค่าดัชนีคุณสามารถเข้าถึงอักขระจากอาร์เรย์อักขระ ในทางกลับกันถ้าคุณต้องการเข้าถึงอักขระเฉพาะในสตริงคุณสามารถเข้าถึงได้โดยฟังก์ชัน string's_name.charAt (index)
- ในฐานะที่เป็นอาร์เรย์ไม่ได้เป็นประเภทข้อมูลในทำนองเดียวกันตัวละครยังไม่ได้เป็นประเภทข้อมูล ในทางกลับกันสตริงเป็นคลาสที่ทำหน้าที่เป็นประเภทอ้างอิงดังนั้นจึงอาจกล่าวได้ว่าสตริงเป็นชนิดข้อมูล
- คุณไม่สามารถใช้โอเปอเรเตอร์กับอาเรย์อักขระได้ในขณะที่คุณสามารถใช้โอเปอเรเตอร์กับ String ได้
- การเป็นอาร์เรย์อักขระอาเรย์มีความยาวคงที่และขอบเขตของมันสามารถถูกบุกรุกได้ง่าย โดยที่ String ไม่มีขอบเขตใด ๆ
- องค์ประกอบของอาร์เรย์จะถูกเก็บไว้ในตำแหน่งหน่วยความจำต่อเนื่องซึ่งสามารถเข้าถึงได้เร็วกว่าตัวแปรสตริง
สรุป:
การไม่สามารถทำงานกับอาเรย์อักขระทำให้เกิดการพัฒนาคลาสสตริงมาตรฐาน