String methods ในภาษา C++

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

  • การหาความยาวของ String
  • การเปลี่ยนแปลงค่าของ String
  • การแทรกและลบข้อความใน String
  • การค้นหาคำใน String
  • การแทนที่คำใน String
  • การตัดคำใน String

การหาความยาวของ String

เราจะเริ่มจากเมธอดพื้นฐาน นั่นคือเมธอดสำหรับหาความยาวของ String เมธอด length() นั้นเป็นเมธอดที่ใช้สำหรับหาความยาวของ String ในภาษา C++ มันส่งค่ากลับเป็นจำนวนตัวอักษรใน String นี่เป็นตัวอย่าง

string_length.cpp
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string name = "Metin";
    string lang = "C++ Language";

    cout << name.length() << endl;
    cout << lang.length() << endl;
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

5
12

ในตัวอย่างนี้ แสดงให้เห็นถึงวิธีการหาความยาวของ String ในภาษา C++ โดยการใช้งานเมธอด length() บนออบเจ็คของ String ในโปรแกรมเราได้ประกาศสองตัวแปร String สำหรับเก็บชื่อและภาษาเขียนโปรแกรม จากนั้นแสดงความยาวของ String ออกทางหน้าจอ

cout << name.length() << endl;
cout << lang.length() << endl;

String นั้นเป็นออบเจ็คจากคลาส string มันประกอบไปด้วยเมธอดเป็นจำนวนมากที่เราสามารถเรียกใช้ได้เพื่อทำงานกับ String ในกรณีนี้ เราได้เรียกใช้เมธอด length() สำหรับหาความยาวของ String

ต่อไปมาสำรวจเมธอดอื่นๆ ของ String ในภาษา C++ ที่เรายังคงสามารถใช้อำนวยความสะดวกในการเขียนโปรแกรมนอกเหนือจากการหาความยาวของ String มาต่อกันที่เมธอดสำหรับการเปลี่ยนแปลงค่าของ String

การเปลี่ยนแปลงค่าของ String

String นั้นเป็นออบเจ็คที่ไม่สามารถเปลี่ยนแปลงค่าได้ (Immutable) เมื่อมันถูกสร้างไปแล้ว ยกตัวอย่างเช่น คุณไม่สามารถเปลี่ยนแปลงตัวอักษรใน String ได้ เพื่อทำเช่นนี้ คุณจะเป็นต้องสร้าง String ใหม่จากค่าที่มีอยู่แล้วและเปลี่ยนส่วนที่ต้องการ ซึ่งในภาษา C++ นั้นมีเมธอดให้กับเราสำหรับการทำเช่นนี้

ในตัวอย่างนี้ มาดูการใช้งานเมธอดสำหรับการเปลี่ยนแปลงค่าของ String ออบเจ็คเป็นค่าใหม่โดยการใช้งานเมธอดจากคลาส string

string_method1.cpp
#include <iostream>
#include <string>

using namespace std;

int main()
{
    // Replace string value
    string lang = "Assembly";
    cout << lang << endl;

    lang.assign("C++");
    cout << lang << endl;

    // Concat string
    string str = "marcus";
    cout << str << endl;

    str.append("code");
    cout << str << endl;
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Assembly
C++
marcus
marcuscode

ในตัวอย่างนี้ เป็นการใช้งานเมธอด assign() สำหรับการแทนที่ค่าในออบเจ็ค String เป็นค่าใหม่ และการใช้งานเมธอด append() สำหรับเชื่อมต่อข้อความเข้าไปยัง String เดิม เราได้ประกาศสองตัวแปร String สำหรับแสดงการทำงานของตัวอย่างนี้

lang.assign("C++");

เมธอด assign() ใช้สำหรับแทนที่ค่าเดิมในตัวแปร String ปัจจุบันให้เป็นค่าใหม่ เราได้เปลี่ยนแปลงค่าในตัวแปร lang จากค่าเดิมที่เป็น "Assembly" ให้เป็น "C++"

str.append("code");

ส่วนเมธอด append() ใช้สำหรับเชื่อมต่อ String จากพารามิเตอร์ของเมธอดเข้ากับค่าปัจจุบันในตัวแปร str และในตอนนี้ตัวแปรของเราได้เก็บค่าเป็น "marcuscode"

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

นอกจากการใช้งานสองเมธอดสำหรับการเปลี่ยนแปลงค่าใน String ที่เราได้แนะนำไป ภาษา C++ ยังมีการ Overload operator สำหรับการทำงานทั้งสอง ซึ่งคุณสามารถใช้งานมันได้และมันได้ผลลัพธ์เช่นเดียวกัน นี่เป็นตัวอย่าง

lang = "C++";
str += "code";

ทั้งตัวดำเนินการกำหนดค่า = และตัวดำเนินการเชื่อมต่อ += เป็น Overload operator ที่ถูกกำหนดไว้ในคลาส string ดังนั้นแทนที่เราจะใช้เมธอดเหมือนในตัวอย่างก่อนหน้า คุณสามารถใช้ตัวดำเนินการเหล่านี้แทนก็ได้

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

นอกจากนี้เรายังสามารถลบข้อความออกจากตัวแปร String ได้โดยการใช้เมธอด clear() เมธอดนี้ลบข้อมูลทั้งหมดออกจากออบเจ็ค String นี่เป็นตัวอย่างการใช้งาน

string str = "Hello World!";
str.clear();

เมธอด clear() ลบข้อความออกจาก String นั่นส่งผลให้ค่าในตัวแปร str เป็น String ที่ว่างเปล่า ซึ่งในความเป็นจริงแล้วมันมีค่าเหมือนกับการที่เรากำหนดค่าว่างให้กับตัวแปร String ดังนี้

str.assign("");
str = "";

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

หลังจากที่เราลบค่าออกจาก String จากในคำสั่งก่อนหน้า การเรียกใช้เมธอด length() เพื่อหาความยาวของ String จะส่งค่ากลับเป็น 0

การแทรกและลบข้อความใน String

นอกจากนี้ภาษา C++ ยังมีเมธอดอื่นๆ สำหรับเปลี่ยนแปลงค่าใน String เมธอด insert() นั้นใช้สำหรับแทรกข้อความเข้าไปยัง String ส่วนเมธอด erase() นั้นใช้สำหรับลบส่วนของข้อความออกจาก String

นี่เป็นตัวอย่างของโปรแกรมสำหรับการแทรกข้อความเข้าไปยัง String

string_insert.cpp
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "Heo World!";
    str.insert(2, "ll");
    cout << str << endl;

    string site = "marcuscodecom";
    site.insert(10, ".");
    cout << site << endl;
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Hello World!
marcuscode.com

ในตัวอย่างนี้ เราได้แสดงให้คุณเห็นการแทรกข้อความหรือตัวอักษรเข้าไปยัง String โดยการใช้งานเมธอด insert() เราได้ประกาศสองตัวแปรที่เก็บคำกล่าวทักทายและชื่อโดเมนของเว็บไซต์

str.insert(2, "ll");

จากนั้นเรียกใช้งานเมธอด insert() เพื่อแทรกข้อความเข้าไปยังตัวแปร str ที่ตำแหน่งที่ 2 ในพารามิเตอร์แรกของเมธอด และข้อความที่ต้องการแทรกเข้าไปในพารามิเตอร์ที่สอง

site.insert(10, ".");

ส่วนตัวแปร site เป็นการแทรกตัวอักษรจุด (.) เข้าไปยัง String ที่ตำแหน่งที่ 10 นี่จะทำให้เราสามารถแยกชื่อเว็บไซต์ออกจากนามสกุลของโดเมนด้วยตัวอักษรที่แทรกเข้าไปได้

ตัวอย่างต่อมาเป็นการลบคำออกจาก String ในกรณีที่เราไม่ต้องการข้อความบางส่วนใน String เราสามารถลบมันออกไปได้ด้วยเมธอด erase() นี่เป็นตัวอย่างการใช้งาน

string_erase.cpp
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string name = "Hi Metin";
    name.erase(0, 3);
    cout << name << endl;

    string str = "I don't want to learn C++";
    str.erase(2, 6);
    cout << str << endl;
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Metin
I want to learn C++

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

string name = "Mi Metin";
name.erase(0, 4);

ดังนั้นเพื่อทำการลบคำกล่าวทักทายหน้าชื่อ "Hi " ออกไปจาก String เรากำหนดพารามิเตอร์แรกเป็น 0 เนื่องจากค่าที่ต้องการลบนั้นเริ่มต้นที่ตำแหน่งที่ 0 และลบออกไปเป็นจำนวน 3 ตัวอักษรโดยนับจากตำแหน่งดังกล่าว

string str = "I don't want to learn C++";
str.erase(2, 6);

ในคำสั่งต่อมา เราต้องการลบคำว่า "don't " ออกไปจากตัวแปร str ดังนั้นตำแหน่งเริ่มต้นของข้อความเริ่มจาก 2 และมันมีความยาวทั้งหมด 6 ตัวอักษร

การค้นหาคำใน String

สำหรับการค้นหาค่าใน String นั้นสามารถทำได้โดยเมธอด find() เมธอดนี้ส่งค่ากลับเป็น Index ของคำที่ต้องการค้นหาที่พบครั้งแรกใน String และส่งค่ากลับเป็น string::npos ในกรณีที่ไม่พบค่าดังกล่าวใน String

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

find_method.cpp
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "Learn CPP string";
    string needle = "CPP";
    size_t found = str.find(needle);

    if (found != string::npos) {
        cout << "Found at index " << found << endl;
    } else {
        cout << "Not found" << endl;
    }
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Found at index 6

ในตัวอย่าง เป็นการใช้งานเมธอด find() สำหรับค้นหาคำว่า "CPP" ในตัวแปร String str เนื่องจากคำดังกล่าวปรากฏอยู่ใน String เริ่มต้นที่ตำแหน่งที่ 6 ดังนั้นนี่จึงเป็นผลลัพธ์ที่ส่งกลับมาของเมธอด

if (found != string::npos) {
...

ในกรณีที่คำที่ต้องการค้นหาไม่พบใน String เมธอดนี้ส่งค่ากลับเป็นค่าของ string::npos ซึ่งเป็นค่าคงที่ที่ถูกกำหนดไว้ในคลาส string ดังนั้นเราสามารถตรวจสอบว่าการค้นหาพบหรือไม่โดยการนำผลลัพธ์มาเปรียบเทียบกับค่านี้

อีกเมธอดหนึ่งที่ใช้สำหรับค้นหาคำใน String ก็คือเมธอด rfind() เมธอดนี้ทำงานคล้ายกับเมธอด find() แต่มันส่งค่ากลับเป็น Index ของการค้นพบของคำค้นหาครั้งสุดท้ายใน String แทน

ในตัวอย่างนี้มาเขียนโปรแกรมสำหรับค้นหาตำแหน่งของคำว่า "code" ที่ปรากฏเป็นครั้งสุดท้ายใน String โดยการใช้งานเมธอด rfind() สำหรับค้นหา

rfind_method.cpp
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "learn code on marcuscode";

    size_t found = str.find("code");
    size_t rfound = str.rfind("code");

    cout << "find: " << found << endl;
    cout << "rfind: " << rfound << endl;
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

find: 6
rfind: 20

แทนที่จะค้นหาจากข้างหน้าของ String เราได้เมธอด rfind() เพื่อเริ่มต้นการค้นหามาจากด้านหลังแทน

ในตัวอย่างจะเห็นว่าในตัวแปร "str" นั้นเก็บ String ที่มีคำว่า "code" อยู่สองที่ ในกรณีนี้เราต้องการค้นหาตำแหน่งของคำที่อยู่ท้ายสุดใน String เราสามารถใช้เมธอด rfind() สำหรับการค้นหาในรูปแบบดังกล่าวได้

size_t found = str.find("code");
size_t rfound = str.rfind("code");

เมธอด rfind() ส่งค่ากลับเป็น 20 ซึ่งเป็น Index ของคำว่า "code" คำที่สองหรือคำสุดท้ายที่พบใน String ในขณะที่เมธอด find() ส่งค่ากับเป็น Index ของคำแรกที่พบ

ถ้าหากคำที่ต้องการค้นหามีเพียงที่เดียวใน String ทั้งเมธอด find() และ rfind() จะให้ผลลัพธ์ที่เหมือนกันเสมอ ในตอนนี้คุณทราบว่าแต่ละเมธอดนั้นมีหน้าที่การทำงานอย่างไร และสามารถเลือกใช้ได้อย่างเหมาะสมกับงานของคุณ

การตัดคำใน String

ในการทำงานกับ String เราอาจต้องการตัดส่วนย่อยของคำใน String ให้เป็น String จากช่วงที่กำหนด ในภาษา C++ เราสามารถตัด String ได้โดยการใช้เมธอด substr() โดยเมธอดส่งค่ากลับเป็น String ใหม่ที่ได้จากการตัดจากช่วงของ Index ที่กำหนด นี่เป็นตัวอย่างการใช้งาน

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string name = "marcuscode.com";

    cout << name.substr(0, 6) << endl;
    cout << name.substr(6, 4) << endl;
    cout << name.substr(10, 1) << endl;
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

marcus
code
.

ในตัวอย่างนี้ เป็นการใช้งานเมธอด substr() สำหรับตัด String จากช่วงต่างๆ ของ "marcuscode" พารามิเตอร์แรกของเมธอดเป็น Index เริ่มต้นของการตัด และพารามิเตอร์ที่สองเป็นจำนวนที่ต้องการตัดนับจาก Index เริ่มต้น

cout << name.substr(0, 6) << endl;
cout << name.substr(6, 4) << endl;

ในคำสั่งแรกเป็นการตัดคำว่า "marcus" โดยการกำหนดตำแหน่งเริ่มต้นเป็น 0 และตัดไปเป็นจำนวน 6 ตัวอักษร เช่นเดียวกับคำว่า "code" ที่เริ่มต้นจากตำแหน่งที่ 4 และตัดไปเป็นจำนวน 4 ตัวอักษร

cout << name.substr(10, 1) << endl;

สุดท้ายเป็นการตัดเอาเพียงเครื่องหมายจุด (.) ใน String โดยการกำหนดตำแหน่งเริ่มต้นเป็น 10 และความยาวของการตัดเป็น 1

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

การแทนที่คำใน String

ในการทำงานกับ String นั้นเราสามารถแทนที่ส่วนของคำที่ต้องการใน String ให้เป็นคำใหม่ได้โดยการใช้เมธอด replace() นี่เป็นตัวอย่างการใช้งานเมธอดสำหรับการแทนที่คำใน String ในภาษา C++

string str = "I'm a Java programmer";
str.replace(6, 4, "C++");
// Output: I'm a C++ programmer

ในการแทนที่คำใน String ด้วยเมธอด replace() นั้นคือการทำงานรวมกันของเมธอด erase() และเมธอด insert() นั่นคือเราต้องลบข้อความที่ไม่ต้องการออกไปก่อน จากนั้นแทรกข้อความใหม่เข้ามายัง String ในตำแหน่งที่ลบออกไป

ในตัวอย่างที่ผ่านมา เราจะต้องนับตำแหน่งและความยาวของคำสำหรับการแทนที่ด้วยตัวเอง ในตัวอย่างนี้ มาปรับปรุงโปรแกรมให้ยืดหยุ่นมากขึ้น โดยการประยุกต์ใช้งานร่วมกับเมธอด find() และเมธอด length() นี่เป็นตัวอย่าง

string_replace.cpp
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str = "I saw a cat in the house yesterday";
    string needle = "in the house";
    string replace_with = "at the school";

    if (str.find(needle) != string::npos) {
        str.replace(str.find(needle), needle.length(), replace_with);
    }
    cout << str << endl;
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

I saw a cat at the school yesterday

ในตัวอย่าง เรามีข้อความที่เก็บไว้ในตัวแปร str ในโปรแกรมเราต้องแทนที่คำว่า "in the house" เป็น "at the school" โดยการใช้งานเมธอด replace() นี่เป็นวิธีการทำงานของโปรแกรมสำหรับการแทนที่ดังกล่าว

string needle = "in the house";
string replace_with = "at the school";

เราได้ประกาศสองตัวแปร ตัวแปร needle ใช้สำหรับเก็บคำที่ไม่ต้องการแล้ว ส่วนตัวแปร replace_with นั้นเป็นคำใหม่ที่ต้องการนำมาแทนที่คำในตัวแปร needle

if (str.find(needle) != string::npos) {
    str.replace(str.find(needle), needle.length(), replace_with);
}

จากนั้นเราใช้เมธอด find() เพื่อค้นหาตำแหน่งของคำที่เก็บในตัวแปร needle ซึ่งเป็นคำที่เราต้องการแทนที่ และถ้าหากพบเราใช้มันกำหนดเป็น Index เริ่มต้นสำหรับพารามิเตอร์แรกของเมธอด replace()

เนื่องจากเมธอดต้องการความยาวของคำที่ต้องการลบออกไป ดังนั้นเราใช้เมธอด length() เพื่อหาความยาวของคำในตัวแปร needle

ในบทนี้ คุณได้เรียนรู้การใช้งานเมธอดของ String ในภาษา C++ เราได้พูดถึงการใช้งานเมธอดสำหรับการทำงานในด้านต่างๆ นอกจากนี้ String ยังมีเมธอดอีกเป็นจำนวนมากที่เรายังไม่ได้พูดถึง เนื่องจากมันไม่ได้ใช้บ่อยนัก คุณสามารถเรียนรู้เพิ่มเติมได้ที่ http://www.cplusplus.com/reference/string/