Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ลบอักขระแรกของสตริงใน C++ อย่างมีประสิทธิภาพ

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

ตัวอย่างที่ 1: ลบอักขระแรกของสตริงด้วยเมธอด erase() ใน C++

ฟังก์ชัน string::erase เป็นวิธีที่แนะนำสำหรับลบอักขระออกจากสตริงแบบในที่ (in-place) โปรแกรม C++ ต่อไปนี้แสดงการใช้งาน overload ต่างๆ:

เริ่มจากฟังก์ชันหลัก main ภายในวงเล็บของ main เราได้กำหนดคลาสเทมเพลตมาตรฐานเพื่อแทนตัวแปรสตริง בשם "StrValue" ตัวแปรสตริง "StrValue" ถูกกำหนดค่าเริ่มต้นด้วยสตริงคำ เรามีคำสั่ง cout มาตรฐานที่จะพิมพ์สตริงตามที่กำหนดค่าเริ่มต้น จากนั้นเราทำการเรียกเมธอด erase บนสตริงนี้ "StrValue"

ภายในเมธอด erase เราส่งผ่านอาร์กิวเมนต์ 0 และ 1 ค่า "0" คือดัชนีของอักขระแรกในสตริง "StrValue" และค่า "1" คือจำนวนอักขระแรกที่จะลบ หลังจากตำแหน่งที่ระบุ เมธอด erase จะลบอักขระตามความยาวที่กำหนดออกจากสตริง ในที่สุดเรามีคำสั่งพิมพ์เพื่อแสดงสตริงหลังจากลบอักขระแรกแล้ว

#include <iostream>
#include <string>

int main()
{
    std::string StrValue = "Happy Me";

    std::cout << "String Before:" << StrValue << std::endl;

    StrValue.erase(0, 1);

    std::cout << "String After:" << StrValue << std::endl;

    return 0;
}

ผลลัพธ์ด้านล่างแสดงการทำงานของเมธอด erase บนสตริงที่ระบุ ตามที่เห็น อักขระแรกของสตริงถูกลบออก:

ลบอักขระแรกของสตริงใน C++ อย่างมีประสิทธิภาพ

ตัวอย่างที่ 2: ลบอักขระแรกของสตริงด้วยวิธี Iterator ใน C++

อีก overload หนึ่งของเมธอด erase() คือการลบโดยใช้ iterator เมธอดนี้รับ iterator เป็นพารามิเตอร์และลบอักขระที่ iterator ชี้ไป โดยการส่งผ่าน iterator ที่ชี้ไปยังอักขระแรกของสตริง เราสามารถลบอักขระแรกของสตริงได้

เราใช้เมธอด erase ในฟังก์ชัน main ของโปรแกรมต่อไปนี้ รูปแบบมาตรฐานของสตริงถูกกำหนดใน main ตัวแปรสตริงถูกสร้างเป็น "StringIs" และกำหนดค่าเริ่มต้นด้วยสตริงอักขระ แรกเราพิมพ์สตริงก่อนใช้เมธอด erase แบบ iterator

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

#include <iostream>
#include <string>

int main()
{
    std::string StringIs = "Programming Example";

    std::cout << "String Before: " << StringIs << std::endl;

    StringIs.erase(StringIs.begin());

    std::cout << "String After: " << StringIs << std::endl;

    return 0;
}

Shell แสดงผลลัพธ์ ซึ่งแสดงสตริงก่อนเมธอด erase แบบ iterator และหลังจากลบอักขระแรกออกจากสตริงแล้ว

ลบอักขระแรกของสตริงใน C++ อย่างมีประสิทธิภาพ

ตัวอย่างที่ 3: ตรวจสอบสตริงว่างก่อนลบอักขระแรกใน C++

ก่อนใช้ฟังก์ชัน string::erase ควรตรวจสอบว่าไม่ใช่สตริงว่าง หากลำดับอินพุตว่าง โปรแกรมจะโยนข้อยกเว้น std::length_error

โปรแกรมประกอบด้วยฟังก์ชัน main ที่ประกาศตัวแปรสตริง "MyStr" สตริงยังถูกกำหนดค่าเริ่มต้นด้วยอักขระขณะประกาศ ค่าสตริงจะถูกพิมพ์บน shell หลังจากนั้นเรามีคำสั่ง if ที่เงื่อนไขถูกนำไปใช้กับสตริงที่กำหนด

เราเรียกเมธอด empty ภายในเงื่อนไข if เพื่อตรวจสอบว่าสตริงไม่ควรว่าง จากนั้น เมธอด erase แบบ iterator ถูกใช้กับสตริงและลบอักขระแรกออกจากสตริงที่ระบุ สตริงจะถูกพิมพ์บนหน้าจอ shell พร้อมกับอักขระแรกถูกลบออกจากสตริง

#include <iostream>
#include <string>

int main()
{
    std::string MyStr = "rainbow";

    std::cout << "String Before:" << MyStr << std::endl;

    if (!MyStr.empty()) {
        MyStr.erase(MyStr.begin());
    }

    std::cout << "String Now:" << MyStr << std::endl;

    return 0;
}

เราได้สตริงผลลัพธ์ดังนี้:

ลบอักขระแรกของสตริงใน C++ อย่างมีประสิทธิภาพ

ตัวอย่างที่ 4: ลบอักขระแรกที่ตรงกับอักขระที่กำหนดใน C++

ตอนนี้เรามีตัวอย่างการลบอักขระแรกหากตรงกับอักขระเฉพาะ โดยใช้ไวยากรณ์ดังนี้:

ตัวแปรสตริงถูกกำหนดค่าเริ่มต้นด้วยค่าสตริงและตั้งชื่อว่า "Name" ใน main ของโปรแกรมต่อไปนี้ เราแสดงสตริงด้วยคำสั่ง cout จากนั้นเรากำหนดตัวแปรอีกตัวหนึ่ง "ch" ด้วยชนิดข้อมูล char ตัวแปร char "ch" ถูกกำหนดอักขระ 'K' ที่ตรงกับอักขระแรกของสตริงก่อนหน้า

จากนั้น ใช้คำสั่ง if เพื่อตรวจสอบเงื่อนไขว่าค่าอักขระ 'K' ตรงกับค่าอักขระแรกของสตริง เรามีฟังก์ชัน front() ซึ่งใช้เพื่อรับอักขระแรกในอ้างอิงของสตริง อักขระแรกของสตริงจะถูกลบโดยใช้ erase iterator

#include <iostream>
#include <string>

int main()
{
    std::string Name = "Kalsoom";
    std::cout << "Name Before: " << Name << std::endl;

    char ch = 'K';

    if (Name.front() == ch) {
        Name.erase(Name.begin());
    }

    std::cout << "Name Now: " << Name << std::endl;

    return 0;
}

ตามที่เห็น อักขระแรกที่ถูกลบออกจากสตริงมีดังนี้:

ลบอักขระแรกของสตริงใน C++ อย่างมีประสิทธิภาพ

ตัวอย่างที่ 5: ลบอักขระแรกของสตริงด้วยเมธอด substr() ใน C++

สตริงถูกปรับเปลี่ยนโดยใช้เมธอด string::erase แบบในที่ (in-place) โดยใช้ฟังก์ชัน string::substr คุณสามารถดึงสำเนาของสตริงโดยไม่มีอักขระสุดท้าย (จริงๆ แล้วคืออักขระแรกในบริบทนี้)

เราใช้ฟังก์ชัน substr บนสตริง "MyString" ในบล็อกเงื่อนไข if ฟังก์ชัน substr ถูกส่งผ่านพร้อมตำแหน่งอักขระแรกและความยาวของสตริงลบ 1 ฟังก์ชันนี้ส่งคืนสตริงที่สร้างขึ้นใหม่จากอ็อบเจกต์สตริงผู้เรียกที่มีอักขระที่ระบุ

#include <iostream>
#include <string>

int main()
{
    std::string MyString = "Bringing";

    std::cout << "Original String: "<< MyString << std::endl;

    std::string n;

    if (!MyString.empty()) {
        n = MyString.substr(1, MyString.size() - 1);
    }

    std::cout << "Changed String: " << n << std::endl;

    return 0;
}

เมธอด substr ลบการเกิดของอักขระแรกออกจากสตริง ตามที่แสดงใน shell ต่อไปนี้:

ลบอักขระแรกของสตริงใน C++ อย่างมีประสิทธิภาพ

สรุป

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