ความแตกต่างระหว่าง Array Character กับ String
เนื้อหา
C ++ รองรับทั้งสอง อาร์เรย์อักขระและสตริงเนื่องจาก C ++ มีประโยชน์มากมายในการใช้งานทั้งคู่ แต่การไม่สามารถทำงานกับอาเรย์อักขระทำให้เกิดการพัฒนาของคลาสสตริงได้ ทั้งอาร์เรย์อักขระและสตริงมีลำดับของอักขระ แต่ความแตกต่างพื้นฐานระหว่างอาร์เรย์อักขระและสตริงคือ "อาร์เรย์อักขระ" ไม่สามารถดำเนินการกับตัวดำเนินการมาตรฐานได้ในขณะที่วัตถุ "สตริง" สามารถดำเนินการกับตัวดำเนินการมาตรฐานได้ มาศึกษาความแตกต่างอื่น ๆ ระหว่างอาร์เรย์อักขระกับสตริง
- แผนภูมิเปรียบเทียบ
- คำนิยาม
- ความแตกต่างที่สำคัญ
- ข้อสรุป
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | 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 name = "Ajay";
ที่นี่ "ถ่าน" เป็นชนิดข้อมูลตัวอักษร "ชื่อ" เป็นชื่อตัวแปรของอาร์เรย์ตัวละคร ฉันได้แสดงสองวิธีในการเริ่มต้นอาร์เรย์อักขระ ในวิธีแรกนั้น null จะถูกกล่าวถึงอย่างชัดเจนและในวิธีที่สองคอมไพเลอร์จะแทรก null โดยอัตโนมัติ
จุดสิ้นสุดของสตริงมักจะเป็นอักขระที่ไม่มีค่าเสมอ มันเป็นตัวละครที่สิ้นสุดของอาร์เรย์ตัวละคร อาร์เรย์อักขระไม่ใช่ชนิดข้อมูลในตัว เราสร้างอาร์เรย์อักขระโดยการประกาศ คุณไม่สามารถใช้โอเปอเรเตอร์มาตรฐานกับอาเรย์อักขระได้ ในการใช้งานอาเรย์อักขระมีฟังก์ชันในตัวเช่น, (strlen (), strlwr (), strupr (), strcat ()) เนื่องจากตัวดำเนินการมาตรฐานไม่สามารถใช้กับอาร์เรย์อักขระได้จึงไม่สามารถมีส่วนร่วมในนิพจน์ใด ๆ ได้
ตัวชี้อักขระไปยังอาร์เรย์อักขระสามารถสร้างได้
มาทำความเข้าใจกับตัวอย่าง
ถ่าน 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 เป็นคลาสที่สร้างอินสแตนซ์เพื่อประกาศสตริง
- การใช้ค่าดัชนีคุณสามารถเข้าถึงอักขระจากอาร์เรย์อักขระ ในทางกลับกันหากคุณต้องการเข้าถึงอักขระเฉพาะในสตริงคุณสามารถเข้าถึงได้โดยใช้ฟังก์ชันสตริง'_name.charAt (ดัชนี)
- ในฐานะที่เป็นอาร์เรย์ไม่ได้เป็นประเภทข้อมูลในทำนองเดียวกันตัวละครยังไม่ได้เป็นประเภทข้อมูล ในทางกลับกันสตริงเป็นคลาสที่ทำหน้าที่เป็นประเภทอ้างอิงดังนั้นจึงอาจกล่าวได้ว่าสตริงเป็นชนิดข้อมูล
- คุณไม่สามารถใช้โอเปอเรเตอร์กับอาเรย์อักขระได้ในขณะที่คุณสามารถใช้โอเปอเรเตอร์กับ String ได้
- การเป็นอาร์เรย์อักขระอาเรย์มีความยาวคงที่และขอบเขตของมันสามารถถูกบุกรุกได้ง่าย โดยที่ String ไม่มีขอบเขตใด ๆ
- องค์ประกอบ Array จะถูกเก็บไว้ในตำแหน่งหน่วยความจำต่อเนื่องซึ่งสามารถเข้าถึงได้เร็วกว่าตัวแปรสตริง
สรุป:
การไม่สามารถทำงานกับอาเรย์อักขระทำให้เกิดการพัฒนาคลาสสตริงมาตรฐาน