วิธีใช้ C++ String Literal

How Use C String Literal



แป้นพิมพ์คอมพิวเตอร์มีตัวอักษรพิมพ์อยู่ เมื่อคุณกดปุ่ม คุณจะเห็นตัวอักษรบนหน้าจอ หมายเหตุ: ช่องว่างยังเป็นอักขระ ลิเทอรัลสตริงคือลำดับของอักขระ บทความนี้อธิบายวิธีใช้ตัวอักษรสตริง C++ คุณควรทราบเกี่ยวกับอาร์เรย์และพอยน์เตอร์ C++ เพื่อทำความเข้าใจบทความนี้

ตัวอักษรตัวอักษร

ตัวอักษรตามตัวอักษรคืออักขระในเครื่องหมายคำพูดเดี่ยว ดังนั้น,







charident1= 'ถึง'; charident2= 'NS'; charident3= '4'; charident4= '6';

เป็นคำจำกัดความของอักขระที่แตกต่างกันทั้งหมด โปรดทราบว่าตัวเลขในเครื่องหมายคำพูดเดี่ยวเป็นอักขระ ไม่ใช่จำนวนเต็ม



ลำดับหลีก เช่น (ดูด้านล่าง) ในเครื่องหมายคำพูดเดี่ยว เป็นอักขระ ดังนั้น,



charident1= '' ';

เป็นตัวละคร





สัญลักษณ์เดียวในเครื่องหมายคำพูดคู่ไม่ใช่อักขระ มันเป็นสตริงของอักขระหนึ่งตัว ดังนั้น A หรือ c หรือ 2 ไม่ใช่อักขระ แต่เป็นสตริงของอักขระแต่ละตัว

ตัวแปรของ char สามารถกำหนดใหม่ได้ภายหลังในโปรแกรมดังนี้:



charตัวตน= 'NS';
ตัวตน= 'และ';

หากต้องการหยุดการเปลี่ยนแปลงอักขระที่กำหนดให้กับตัวระบุ ภายหลังในโปรแกรม ให้นำหน้าคำจำกัดความด้วยคำสงวน const ดังนี้:

const charตัวตน= 'NS';

ตัวแปร ident ถูกกล่าวว่าเป็นแบบอ่านอย่างเดียว

ตัวอักษรสตริง

สตริงตามตัวอักษรคือลำดับของอักขระในเครื่องหมายคำพูดคู่ ดังนั้น,

charident1[] = 'ผมรักคุณ'; charident2[] = 'ฉันเกลียดคุณ 3 คน'; charident3[]
= 'เราคือโลก'; charident4[] = 'สวัสดีชาวโลก!';

เป็นคำจำกัดความที่แตกต่างกันของตัวอักษรสตริง สังเกตการใช้เครื่องหมายคำพูดคู่ ไม่มีอะไรที่เหมือนกับตัวแปรธรรมดาสำหรับสตริง ลิเทอรัลสตริงคืออาร์เรย์ของอักขระ ซึ่งแทนที่จะคั่นด้วย {} ลำดับจะถูกคั่นด้วย อักขระไม่ได้คั่นด้วยเครื่องหมายจุลภาค จำนวนใดๆ ที่มากกว่าจำนวนอักขระในสตริงตามตัวอักษร สามารถใส่ลงในวงเล็บเหลี่ยมได้ อย่างไรก็ตาม ควรเว้นวงเล็บเหลี่ยมว่างไว้

อักขระตัวเดียวในเครื่องหมายคำพูดคู่ไม่ใช่อักขระ มันเป็นสตริงของอักขระหนึ่งตัว ดังนั้น A หรือ c หรือ 2 ไม่ใช่อักขระ แต่เป็นสตริงของอักขระแต่ละตัว

ตัวแปรสตริงไม่อนุญาตให้มีการกำหนดตัวอักษรที่สมบูรณ์ใหม่อีกครั้งในโปรแกรม - ดูด้านล่าง อย่างไรก็ตาม อักขระแต่ละตัวสามารถกำหนดใหม่ได้ – ดูด้านล่าง

อ้างเดี่ยวและคู่ในตัวอักษรหรือตามตัวอักษร

หากต้องการมีเครื่องหมายคำพูดเดียวเป็นอักขระ ให้ทำดังนี้

charตัวตน= ' '';

หากต้องการให้มีเครื่องหมายอัญประกาศคู่เป็นอักขระในสตริงตามตัวอักษร ให้ทำดังนี้

charตัวตน[] = 'ห่างออกไป'ซีดี';

แบ็กสแลชใช้ในลำดับหลีกเพื่อหลีกเลี่ยงความขัดแย้งกับตัวคั่น ในการมีเครื่องหมายอัญประกาศคู่เป็นอักขระ ไม่จำเป็นต้องใส่แบ็กสแลช: ‘‘ ไม่เป็นไร ในการมีอัญประกาศเดี่ยวในสตริงตามตัวอักษร ไม่จำเป็นต้องมีแบ็กสแลช:ab'cd ไม่เป็นไร

เนื่องจากแบ็กสแลชใช้เพื่อ Escape อักขระ จึงต้องมีการ Escape กับแบ็กสแลชอื่นเมื่อใช้เป็นอักขระหรือในสตริงตามตัวอักษร

ลำดับการหลบหนี

ลำดับการหลบหนีเป็นหนึ่งใน:

''? \ ถึง NS NS NS NS>NS v

โดยปกติ Escape Sequence แต่ละลำดับจะพิมพ์เป็นอักขระภายในเครื่องหมายคำพูดเดี่ยวหรือเป็นลำดับ Escape ภายในเครื่องหมายคำพูดคู่

  • ' : ใช้เป็นอักขระอัญประกาศเดี่ยวภายในเครื่องหมายอัญประกาศเดี่ยว
  • : ใช้เป็นอักขระอัญประกาศคู่ ภายในตัวอักษร
  • ? : ตั้งแต่ ? เป็นอักขระที่สงวนไว้ ควรหลีกเลี่ยงตามตัวอักษร
  • \ : แบ็กสแลชควรหลีกเลี่ยงเป็นอักขระหรือในสตริงตามตัวอักษร เพื่อไม่ให้เกิดความหมายอื่น
  • a : ส่งเสียงกริ่งเตือนหนึ่งครั้ง เมื่อใช้เป็นอักขระหรืออยู่ภายในตัวอักษรสตริง
  •  : ผลลัพธ์เป็นแบ็คสเปซในการแสดงผลภายในสตริงตามตัวอักษร โดยนำอักขระก่อนหน้าออก
  • f : ทำให้หน้าถัดไปถูกป้อนไปยังเครื่องพิมพ์เมื่อใช้เป็นอักขระหรือภายในตัวอักษร
  • : ส่งคืนเคอร์เซอร์ ซึ่งจะพิมพ์อักขระตัวถัดไป แต่อยู่ภายในบรรทัดปัจจุบัน
  • : ส่งคืนเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัดถัดไปหรือเพียงแค่ไปยังบรรทัดถัดไป ขึ้นอยู่กับระบบปฏิบัติการ
  • : สร้างแท็บแนวนอน
  • v : สร้างแท็บแนวตั้ง

การดำเนินการกับตัวละคร

การต่อกัน

ที่นิยาม ลิเทอรัลสตริงสองตัวสามารถเชื่อมกับช่องว่างได้ดังนี้:

charตัวตน[] = 'เอบีซี' 'def';
ค่าใช้จ่าย<<ตัวตน<< 'NS';

ผลลัพธ์คือ: abcdef คำจำกัดความนี้สามารถขยายได้มากกว่าสองตัวอักษร หมายเหตุ: คำสั่งเป็นคำจำกัดความ ไม่ใช่แค่การมอบหมาย คำจำกัดความสามารถดำเนินต่อไปยังบรรทัดถัดไปโดยเว้นวรรคแยกบรรทัดดังนี้:

charตัวตน[] = 'เอบีซี' 'def'
'รับทราบ';
ค่าใช้จ่าย<<ตัวตน<< 'NS';

ผลลัพธ์คือ abcdefghi

หมายเหตุ: ไม่สามารถต่ออักขระในลักษณะนี้ได้ เนื่องจากเครื่องหมายคำพูดเดี่ยวสำหรับอักขระไม่สามารถมีสัญลักษณ์ได้มากกว่าหนึ่งตัว

ตัวดำเนินการความเท่าเทียม

อักขระเดียวกันในกรณีเดียวกันมีค่าเท่ากัน จะไม่เท่ากันหากไม่ใช่กรณีเดียวกัน พิจารณา,

ผลบูล= 'NS' == 'NS';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

== หมายถึงเท่ากับ ในขณะที่ = หมายถึงกำหนดให้และไม่เท่ากับ ผลลัพธ์คือ 1 สำหรับค่าจริง พิจารณา,

ผลบูล= 'NS' == 'NS';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

เอาต์พุตเป็น 0 สำหรับเท็จ พิจารณา,

ผลบูล= 'NS' == 'ค';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

เอาต์พุตเป็น 0 สำหรับเท็จ พิจารณา,

ผลบูล= 'NS' ! = 'NS';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

!= หมายถึงไม่เท่ากัน ในขณะที่ = หมายถึงมอบหมายให้และไม่เท่ากัน เอาต์พุตเป็น 0 สำหรับเท็จ พิจารณา,

ผลบูล= 'NS' ! = 'NS';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

ผลลัพธ์คือ 1 สำหรับค่าจริง พิจารณา,

ผลบูล= 'NS' ! = 'ค';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

ผลลัพธ์คือ 1 สำหรับค่าจริง

ดังนั้น == และ != เป็นตัวดำเนินการความเท่าเทียมกัน

ผู้ประกอบการสัมพันธ์

สำหรับอักขระธรรมดาในภาษา C++ เรียงลำดับจากน้อยไปมาก ตัวเลขจะมาก่อนอักษรตัวพิมพ์ใหญ่ ซึ่งมาก่อนอักษรตัวพิมพ์เล็ก

ดังนั้น= มีคำอธิบายในทำนองเดียวกัน

อักษรสตริงเป็นวัตถุ

อาร์เรย์เป็นตัวชี้คงที่ที่จุดเริ่มต้นของลำดับประเภทข้อมูลเฉพาะ ในทำนองเดียวกัน สตริงคือตัวชี้คงที่ที่จุดเริ่มต้นของลำดับอักขระ เปรียบเทียบคำจำกัดความต่อไปนี้:

intarr[] = {3, 4, 5, 6, 7};
charNS[] = {'ใน', 'หรือ', 'NS', 'ถึง', 'NS'};
charสตริ[] = 'ผู้หญิง';

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

arr เป็นตัวชี้คงที่ไปยังองค์ประกอบแรกของอาร์เรย์ หมายความว่า arr จะชี้ไปที่ตำแหน่งที่มีจำนวนเต็มเสมอ 3 แม้ว่าค่าของ 3 จะเปลี่ยนไปก็ตาม ขนาดของอาร์เรย์ห้าองค์ประกอบไม่คงที่จริงๆ อย่างไรก็ตาม ค่าแต่ละค่าของอาร์เรย์สามารถเปลี่ยนแปลงได้

str เป็นตัวชี้คงที่ไปยังองค์ประกอบแรกของอาร์เรย์ หมายความว่า str จะชี้ไปที่ตำแหน่งที่มีอักขระเสมอ 'w' แม้ว่าค่าของ 'w' จะเปลี่ยนไปก็ตาม ขนาดของอาร์เรย์อักขระห้าองค์ประกอบไม่คงที่จริงๆ อย่างไรก็ตาม ค่าแต่ละค่าของตัวอักษรสามารถเปลี่ยนแปลงได้

stri เป็นตัวชี้คงที่ไปยังองค์ประกอบแรกของตัวอักษร (อาร์เรย์) ซึ่งหมายความว่า stri จะชี้ไปที่ตำแหน่งที่มีอักขระเสมอ w แม้ว่าค่าของ w จะเปลี่ยนไปก็ตาม ขนาดของตัวอักษรสตริง (อาร์เรย์) ห้าองค์ประกอบไม่คงที่จริงๆ อย่างไรก็ตาม แต่ละค่าของตัวอักษรสามารถปรับเปลี่ยนได้

ค่าคงที่ในอาร์เรย์หรือสตริงตามตัวอักษรคืออะไร? ที่อยู่หน่วยความจำขององค์ประกอบแรกของอาร์เรย์หรือตามตัวอักษรยังคงเป็นค่าของชื่อ (ตัวระบุ) ของอาร์เรย์หรือตามตัวอักษร และไม่สามารถเปลี่ยนแปลงได้ ขนาดของอาร์เรย์หรือตัวอักษรไม่คงที่จริงๆ แต่ละค่าในอาร์เรย์หรือตามตัวอักษรสามารถเปลี่ยนแปลงได้ รหัสต่อไปนี้แสดงให้เห็นว่าองค์ประกอบที่สี่ของแต่ละอาร์เรย์มีการเปลี่ยนแปลงอย่างไร:

intarr[] = {3, 4, 5, 6, 7};
charNS[] = {'ใน', 'หรือ', 'NS', 'ถึง', 'NS'};
charสตริ[] = 'ผู้หญิง';

arr[3] = 9;
NS[3] = 'และ';
สตริ[3] = 'และ';

ค่าใช้จ่าย<<arr[3] << 'NS';
ค่าใช้จ่าย<<NS<< 'NS';
ค่าใช้จ่าย<<สตริ<< 'NS';

ผลลัพธ์คือ:

9
ผู้หญิงผู้หญิง
ผู้หญิง

โปรดทราบว่าองค์ประกอบของสตริงตามตัวอักษรที่กำหนดไว้ เช่นเดียวกับคำจำกัดความที่สามข้างต้น สามารถเข้าถึงได้ด้วยดัชนีอาร์เรย์ (ตัวห้อย) เหตุผลสำหรับบรรทัดที่สองของเอาต์พุตแสดงไว้ด้านล่าง

คำนิยาม ตัวห้อย

โปรดทราบว่าในคำจำกัดความข้างต้น ไม่มีจำนวนเต็มสำหรับตัวห้อย เมื่อโปรแกรมเมอร์ไม่สามารถกำหนดจำนวนองค์ประกอบได้โดยง่าย ควรละจำนวนเต็มสำหรับตัวห้อย ไม่ว่าในกรณีใด จำนวนเต็มไม่ควรน้อยกว่าจำนวนองค์ประกอบในอาร์เรย์

สำหรับสตริงตามตัวอักษร จำนวนเต็มควรมากกว่าจำนวนอักขระในสตริงอย่างน้อย 1 ตัว เนื่องจากคอมไพเลอร์จะเพิ่มอักขระ null () ไว้ที่ส่วนท้ายของอาร์เรย์ที่เป็นสตริงเสมอ โดยคั่นด้วยเครื่องหมายคำพูดคู่ อักขระ null จะไม่ถูกเพิ่มที่ส่วนท้ายของอาร์เรย์ที่สองด้านบน เนื่องจากไม่ใช่สตริงที่เป็นทางการ อาร์เรย์ที่สามเป็นสตริงที่เป็นทางการ รหัสต่อไปนี้แสดงค่าตัวห้อยขั้นต่ำ

intarr[5] = {3, 4, 5, 6, 7};
charNS[5] = {'ใน', 'หรือ', 'NS', 'ถึง', 'NS'};
charสตริ[6] = 'ผู้หญิง';

เพื่อให้คำจำกัดความที่สองเป็นสตริงที่เป็นทางการ จะต้องเพิ่มอักขระ null ดังนี้:

intarr[5] = {3, 4, 5, 6, 7};
charNS[6] = {'ใน', 'หรือ', 'NS', 'ถึง', 'NS', ' 0'};
charสตริ[6] = 'ผู้หญิง';

ผลลัพธ์ควรเป็น

9
ผู้หญิง
ผู้หญิง

โดยไม่มีผู้หญิงคนที่สอง โปรดทราบว่าตัวห้อยที่สอดคล้องกันสำหรับอาร์เรย์ที่สองคือ 6 และไม่ใช่ 5 เหมือนเดิม

ค่าคงที่ตามตัวอักษร

หากต้องการหยุดอักขระใดๆ ในเครื่องหมายคำพูดคู่ที่กำหนดให้กับตัวระบุไม่ให้ถูกแก้ไข ภายหลังในโปรแกรม ให้นำหน้าคำจำกัดความด้วยคำสงวน const ดังนี้:

const charตัวตน[] = 'ผมรักคุณ';

การดำเนินการกับตัวอักษรสตริง

การดำเนินงานที่เท่าเทียมกัน

ตัวดำเนินการความเท่าเทียมกันคือ == และ != เมื่อเปรียบเทียบตัวแปร (ตัวระบุ) ของสองสตริง จะเป็นตัวชี้ (ที่อยู่) ของตัวอักษรที่จะถูกเปรียบเทียบ ว่าเป็นสิ่งที่ผิด. ในการเปรียบเทียบสตริง จะต้องเปรียบเทียบตัวอักษร ตามโค้ดต่อไปนี้:

ผลบูล= 'ผู้หญิง' == 'ผู้หญิง';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

ผลลัพธ์คือ 1 สำหรับค่าจริง การเปรียบเทียบทำได้ในรูปแบบพจนานุกรม แต่ด้วยตัวเลขที่มาก่อนในลำดับจากน้อยไปมาก ก่อนอักษรตัวพิมพ์ใหญ่ซึ่งมาก่อนอักษรตัวพิมพ์เล็ก ผลลัพธ์ของรหัสต่อไปนี้คือ 0 สำหรับเท็จ

ผลบูล= 'ผู้หญิง' ! = 'ผู้หญิง';
ค่าใช้จ่าย<<ผลลัพธ์<< 'NS';

ตัวดำเนินการเชิงสัมพันธ์พร้อมตัวอักษรสตริง

ตัวดำเนินการเชิงสัมพันธ์ไม่ทำงานกับตัวอักษรสตริง

อักษรสตริงดิบ

ลิเทอรัลสตริงดิบ อนุญาตให้แสดงสตริงเป็นประเภท ละเว้น Escape Sequence และเคารพการขึ้นบรรทัดใหม่ พิจารณารหัสต่อไปนี้:

charNS[] =NS'(abc\d efg เขา
klmnNS'
'opq
ก่อน)';
ค่าใช้จ่าย<< str << '
NS';

ผลลัพธ์คือ:

abc\d efg เขา
klmn n'' opq
อันดับแรก

ในโค้ด อักษรสตริงแบบ raw ขึ้นต้นด้วย R ตามด้วย และ ( . มันลงท้ายด้วย ) และ .

ประเภทตัวอักษรของสตริงหลัก C++

char

ประเภทอักขระเป็นประเภท C ++ ดั้งเดิมและโดยทั่วไปจะจัดเก็บอักขระใน 8 บิต

char16_t

นี้เก็บอักขระใน 16 บิต

char32_t

สิ่งนี้จะเก็บอักขระใน 32 บิต

wchar_t

char16_t และ char32_t เป็นอักขระแบบกว้าง wchar_t เป็นอักขระแบบกว้างที่เป็นกรรมสิทธิ์และกำหนดการใช้งาน

บทสรุป

อักขระตามตัวอักษรคืออักขระตัวเดียวในเครื่องหมายคำพูดเดี่ยว ลำดับหลีกเป็นอักขระที่สามารถอยู่ในเครื่องหมายคำพูดเดี่ยวได้ สตริงตามตัวอักษรคือลำดับของอักขระในเครื่องหมายคำพูดคู่ ตัวอักษรสตริงคืออาร์เรย์ของอักขระที่ลงท้ายด้วย ตัวดำเนินการความเท่าเทียมและเชิงสัมพันธ์ทำงานกับตัวอักษร ตัวดำเนินการความเท่าเทียมกันทำงานกับตัวอักษรสตริง แต่ตัวดำเนินการเชิงสัมพันธ์ไม่ทำงานกับตัวอักษรสตริง ตัวระบุอักขระสามารถใช้ในการเปรียบเทียบได้ แต่ไม่ควรใช้ตัวระบุสตริงในการเปรียบเทียบ ตัวอักษรสตริงแบบ raw อนุญาตให้แสดงสตริงตามที่พิมพ์ ละเว้นลำดับการยกเว้น และคำนึงถึงการขึ้นบรรทัดใหม่

คริส