String methods ในภาษา C++
ในบทก่อนหน้า คุณได้เรียนรู้เกี่ยวกับ String ในพื้นฐาน นั่นเป็นวิธีที่คุณสามารถใช้งาน String ในการเขียนโปรแกรมในภาษา C++ ในบทนี้จะเป็นการแนะนำการใช้งานเมธอดของ String ที่สามารถช่วยอำนวยความสะดวกให้กับเราได้เมื่อต้องทำงานกับ String นี่เป็นเนื้อหาในบทนี้
- การหาความยาวของ String
- การเปลี่ยนแปลงค่าของ String
- การแทรกและลบข้อความใน String
- การค้นหาคำใน String
- การแทนที่คำใน String
- การตัดคำใน String
การหาความยาวของ String
เราจะเริ่มจากเมธอดพื้นฐาน นั่นคือเมธอดสำหรับหาความยาวของ String เมธอด length()
นั้นเป็นเมธอดที่ใช้สำหรับหาความยาวของ String ในภาษา C++ มันส่งค่ากลับเป็นจำนวนตัวอักษรใน String นี่เป็นตัวอย่าง
#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
#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
#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()
นี่เป็นตัวอย่างการใช้งาน
#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 และแสดงตำแหน่งที่พบออกทางหน้าจอ
#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()
สำหรับค้นหา
#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()
นี่เป็นตัวอย่าง
#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/