String ในภาษา C++
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ String ในภาษา C++ เราจะพูดถึงการประกาศและการนำ String มาใช้งานในการเขียนโปรแกรม นอกจากนี้ เรายังจะพูดถึงการดำเนินการพื้นฐานที่จำเป็นต้องทราบเกี่ยวกับ String นี่เป็นเนื้อหาในบทนี้
- การประกาศ String
- การหาความยาวของ String
- การเชื่อมต่อ String
- การเปรียบเทียบ String
- การเข้าถึงตัวอักษรใน String
การประกาศ String
ในภาษา C++ นั้น String ไม่ได้เป็นประเภทข้อมูลพื้นฐานเหมือนกับข้อมูลประเภทอื่นๆ แต่มันเป็นออบเจ็คจากคลาส string
ซึ่งเป็นคลาสจากไลบรารี่มาตรฐานของภาษา C++ โดยไลบรารี่ <string>
นั้นถูกกำหนดไว้อยู่ภายใต้เนมสเปช std
นี่เป็นรูปแบบของการประกาศ String ในภาษา C++
string str = "some string";
string str("some string");
สองรูปแบบของการประกาศ String นั้นให้ผลลัพธ์ที่เหมือนกัน รูปแบบแรกเป็นการประกาศ String โดยใช้ตัวดำเนินการกำหนดค่า และรูปแบบที่สองใช้คลาสคอนสตรัคเตอร์ ในบทเรียนของเราจะใช้แบบแรกเป็นหลัก
ต่อไปมาดูตัวอย่างการประกาศ String ในภาษา C++ ในตัวอย่างนี้เป็นการประกาศ String เก็บไว้ในตัวแปรจากนั้นแสดงค่าของ String ออกทางหน้าจอ
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "This is a string";
string name = "Metin";
cout << str << endl;
cout << name << endl;
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
This is a string
Metin
ในตัวอย่างเป็นการประกาศและใช้งาน String ในภาษา C++ สำหรับเก็บข้อมูลที่เป็นข้อความหรือลำดับตัวอักษร ที่ด้านบนของโปรแกรมเราได้นำเข้าไลบรารี่ <string>
ด้วยคำสั่ง #include
เพื่อใช้งาน String ในโปรแกรม
string str = "This is a string";
string name = "Metin";
นี่เป็นการสร้างออบเจ็คของ String โดยใช้คลาส string
เป็นประเภทของตัวแปร จะเห็นว่าค่าของ String จะอยู่ภายในเครื่องหมาย Double quote ("
) เสมอ นี่เป็นวิธีที่เราใช้ในการกำหนด String literal ในภาษา C++ เราได้ประกาศสองตัวแปรของ String สำหรับเก็บข้อความและชื่อ
cout << str << endl;
cout << name << endl;
จากนั้นเป็นการแสดงค่าของ String ออกทางหน้าจอ เช่นเดียวกันกับข้อมูลประเภทอื่นๆ ในภาษา C++ เราสามารถใช้คำสั่ง cout
สำหรับแสดงค่าของ String ออกทางหน้าจอได้
การหาความยาวของ String
เมื่อทำงานกับ String เราอาจต้องการทราบความยาวของ String สำหรับการหาความยาวของ String ในภาษา C++ นั้นสามารถทำได้โดยการเรียกใช้เมธอด length()
บนออบเจ็คของ String นี่เป็นตัวอย่างการหาความยาวของ String ในภาษา C++
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "C++ Language";
string day = "Friday";
cout << "Length of string" << endl;
cout << str.length() << endl;
cout << day.length() << endl;
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Length of string
12
6
ในตัวอย่าง เราได้ประกาศสองตัวแปร String ตัวแปร str
เก็บชื่อของภาษาเขียนโปรแกรม และตัวแปร day
เก็บชื่อวันของสัปดาห์ จากนั้นเรียกใช้เมธอดเพื่อหาความยาวของ String และแสดงค่าดังกล่าวออกทางหน้าจอ
cout << str.length() << endl;
cout << day.length() << endl;
เมธอด length()
ส่งค่ากลับเป็นจำนวนของตัวอักษรทั้งหมดใน String รวมทั้งช่องว่างด้วย เนื่องจากช่องว่างถือว่าเป็นส่วนหนึ่งของเนื้อหาของ String
Note: การทำงานของเมธอด
length()
จะถือว่าหนึ่งตัวอักษรเท่ากับ 1 ไบต์เสมอ ถ้าหากคุณทำงานกับ String ที่หนึ่งตัวอักษรมีหลายไบต์ เช่น String ที่เข้ารหัสแบบ UTF-8 คุณจะต้องเขียนโปรแกรมเพื่อจัดการกับมันด้วยตัวเอง
การเชื่อมต่อ String
ในภาษา C++ นั้นเราสามารถเชื่อมต่อ String เข้าด้วยกันได้โดยการใช้ตัวดำเนินการ +
ซึ่งนี่เป็นตัวดำเนินการที่ได้รับการ Overload สำหรับอำนวยความสะดวกในการเชื่อมต่อ String โดยเฉพาะ นี่เป็นตัวอย่างของการเชื่อมต่อ String ในภาษา C++
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1 = "marcus";
string str2 = "code";
string str3 = str1 + str2;
cout << str1 << endl;
cout << str2 << endl;
cout << str3 << endl;
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
marcus
code
marcuscode
ในตัวอย่าง เป็นการแสดงการเชื่อมต่อ String ด้วยการใช้ตัวดำเนินการ +
ในตอนแรกเราได้ประกาศสองตัวแปร str1
และ str2
ที่เก็บชื่อของเว็บไซต์ marcuscode แยกออกจากกัน
string str3 = str1 + str2;
จากนั้นเป็นการนำค่าของ String ในตัวแปรทั้งสองมาเชื่อมต่อกันด้วยตัวดำเนินการ +
ผลลัพธ์ของการเชื่อมต่อนั้นส่งค่ากลับเป็น String ใหม่ที่ได้จากการเชื่อมต่อกันจากตัวแปร str1
และ str2
ตามลำดับ จากนั้นเรานำค่าที่ได้เก็บไว้ในตัวแปร str3
และแสดงออกทางหน้าจอ
การเชื่อมต่อ String ด้วยตัวดำเนินการ +
จะทำให้เราสามารถสร้าง String ใหม่จาก String เดิมที่มีอยู่แล้วได้ ในขณะที่เรายังคงมีค่าของ String เดิมเก็บเอาไว้ใช้งาน
การเปรียบเทียบ String
ในภาษา C++ มีเมธอดพื้นฐานสำหรับการเปรียบเทียบ String เมธอด compare()
นั้นเป็นเมธอดที่ใช้สำหรับเปรียบเทียบสอง String และส่งผลลัพธ์การเปรียบเทียบเป็นตัวเลขจำนวนเต็มที่มีความหมายดังต่อไปนี้
0
: ผลลัพธ์ของการเปรียบเทียบstr1
เท่ากับstr2
-1
: ผลลัพธ์ของการเปรียบเทียบstr1
น้อยกว่าstr2
1
: ผลลัพธ์ของการเปรียบเทียบstr1
มากกว่าstr2
ต่อไปมาดูตัวอย่างการใช้งานเมธอด compare()
สำหรับการเปรียบเทียบ String ในภาษา C++ เราจะแสดงการเปรียบเทียบหลายแบบเพื่อให้คุณเห็นผลลัพธ์การทำงานของเมธอดในรูปแบบต่างๆ นี่เป็นตัวอย่าง
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str1 = "apple";
string str2 = "banana";
cout << str1.compare(str2) << endl;
string str3 = "java";
string str4 = "cpp";
cout << str3.compare(str4) << endl;
string str5 = "marcuscode";
string str6 = "marcuscode";
cout << str5.compare(str6) << endl;
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
-1
1
0
ในตัวอย่างนี้ เป็นการใช้งานเมธอด compare()
ในการเปรียบเทียบระหว่างสอง String และอย่างที่เราบอกผลลัพธ์ของเมธอดจะส่งค่ากลับเป็นจำนวนเต็มเพื่อบอกว่าการเปรียบเทียบน้อยกว่า มากกว่า หรือเท่ากับ
string str1 = "apple";
string str2 = "banana";
cout << str1.compare(str2) << endl;
สำหรับการเปรียบเทียบแรก เราทำการเปรียบเทียบค่าของ String ในสองตัวแปรที่เก็บค่าเป็น apple
และ banana
ตามลำดับ จะเห็นว่าผลลัพธ์ของการเปรียบเทียบนั้นเป็น -1
นั่นหมายความว่าค่าของ String ในตัวแปร str1
มีค่าน้อยกว่า str2
string str3 = "java";
string str4 = "cpp";
cout << str3.compare(str4) << endl;
ต่อมาเป็นการเปรียบเทียบค่าของ String ที่มีค่าเป็น java
และ cpp
ผลลัพธ์ของการเปรียบเทียบนี้ส่งค่ากลับเป็น 1
นั่นหมายความว่าค่าของ String ในตัวแปร str3
มีค่ามากกว่า str4
string str5 = "marcuscode";
string str6 = "marcuscode";
cout << str5.compare(str6) << endl;
สุดท้ายเป็นการเปรียบเทียบค่าของ String ที่มีค่าเท่ากัน และอย่างที่คุณเห็นผลลัพธ์ของการเปรียบเทียบนั้นส่งค่ากลับเป็น 0
นั่นหมายความว่าค่าในตัวแปรทั้งสองมีค่าเท่ากันนั่นเอง
นอกจากการเปรียบเทียบ String โดยการใช้เมธอด compare()
แล้ว ภาษา C++ ยังมี Overload operators สำหรับการเปรียบเทียบ String ที่เราสามารถใช้ได้ แทนที่จะส่งค่ากลับเป็นตัวเลข ตัวดำเนินการเหล่านี้ส่งค่ากลับเป็น Boolean แทน
นี่เป็นรายการของตัวดำเนินการทั้งหมดที่คุณสามารถใช้ในการเปรียบเทียบ String ในภาษา C++
ตัวดำเนินการ | การทำงาน | ตัวอย่าง |
---|---|---|
== | เท่ากับ | str1 == str2 |
!= | ไม่เท่ากับ | str1 != str2 |
< | น้อยกว่า | str1 < str2 |
<= | น้อยกว่าหรือเท่ากับ | str1 <= str2 |
> | มากกว่า | str1 > str2 |
>= | มากกว่าหรือเท่ากับ | str1 >= str2 |
ต่อไปมาดูตัวอย่างการใช้งานตัวดำเนินการ เราจะเขียนโปรแกรมเพื่อจำลองการเข้าสู่ระบบ โดยโปรแกรมจะถามให้ผู้ใช้งานกรอกชื่อและรหัสผ่าน และนำไปตรวจสอบว่าถูกต้องหรือไม่ ถ้าใช่หมายความว่าการเข้าสู่ระบบสำเร็จ
#include <iostream>
#include <string>
using namespace std;
int main()
{
string username;
string password;
cout << "Enter username: ";
cin >> username;
cout << "Enter password: ";
cin >> password;
if (username == "metin" && password == "secret") {
cout << "Login success" << endl;
} else {
cout << "Invalid username or password" << endl;
}
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรมจากการรันโปรแกรมสองครั้ง ครั้งแรกเป็นการกรอกชื่อผู้ใช้และรหัสผ่านที่ถูกต้อง
Enter username: metin
Enter password: secret
Login success
จากนั้นใส่รหัสผ่านที่ไม่ถูกต้องให้กับโปรแกรม นั่นทำให้ผลลัพธ์การเปรียบเทียบไม่เป็นจริงและโปรแกรมทำงานในบล็อคของคำสั่ง else แทน
Enter username: metin
Enter password: 1234
Invalid username or password
ในตัวอย่าง เป็นโปรแกรมจำลองเข้าสู่ระบบที่สามารถพบเห็นได้ทั่วไป เช่น บนเว็บโซต์ สำหรับตัวอย่างนี้ เราเพียงแค่แสดงวิธีการใช้งานตัวดำเนินการเปรียบสำหรับเปรียบเทียบ String เท่านั้น
string username;
string password;
ในตอนแรกเราได้ประกาศสองตัวแปรสำหรับเก็บชื่อผู้ใช้และรหัสผ่าน เรายังไม่ได้กำหนดค่าใดๆ ให้กับตัวแปรเนื่องจากเราจะรับมาจากผู้ใช้งานโปรแกรมผ่านทางคีย์บอร์ดด้วยคำสั่ง cin
แทน
cout << "Enter username: ";
cin >> username;
cout << "Enter password: ";
cin >> password;
โปรแกรมถามให้ผู้ใช้งานกรอกชื่อผู้ใช้และรหัสผ่านของเขา จากนั้นเก็บไว้ในตัวแปร username
และ password
เพื่อนำไปตรวจสอบความถูกต้องของค่าที่กรอกเข้ามา
if (username == "metin" && password == "secret") {
cout << "Login success" << endl;
} else {
cout << "Invalid username or password" << endl;
}
ในการเปรียบเทียบว่า String เท่ากันหรือไม่ เราสามารถใช้ตัวดำเนินการเปรียบเทียบความเท่ากัน ==
ที่จะส่งค่ากลับเป็นจริงถ้าหาก String ทั้งสองมีค่าเท่ากัน การเข้าสู่ระบบจะสำเร็จก็ต่อเมื่อชื่อผู้ใช้และรหัสผ่านมีค่าเท่ากับ metin
และ secret
ตามลำดับ
ตัวดำเนินการสำหรับเปรียบเทียบเหล่านี้ถูกออกแบบมาเพื่ออำนวยความสะดวกในการเขียนโปรแกรม มันสามารถช่วยให้เราเขียนโค้ดได้สั้นลงและรวดเร็วมากขึ้น นอกจากนี้มันยังช่วยให้โค้ดสามารถอ่านเข้าใจได้ง่ายขึ้น
อย่างไรก็ตาม การทำงานเบื้องหลังของตัวดำเนินการเหล่านี้ก็ยังคงมาจากเมธอด compare()
คุณสามรถเขียนโปรแกรมเพื่อให้ได้ผลลัพธ์เช่นเดียวกันโดยการใช้เมธอด compare()
ได้ นี่เป็นตัวอย่าง
if (username.compare("metin") == 0 && password.compare("secret") == 0) {
cout << "Login success" << endl;
} else {
cout << "Invalid username or password" << endl;
}
เนื่องจากเราทราบว่าเมธอดส่งค่ากลับเป็น 0
เมื่อ String มีค่าเท่ากับ ดังนั้นเราจึงต้องนำผลลัพธ์มาเปรียบเทียบกับ 0
เพื่อสร้างเงื่อนไขที่เป็น Boolean
การเข้าถึงตัวอักษรใน String
String เป็นออบเจ็คที่ถูกสร้างมาจากพอยน์เตอร์ของตัวอักษร (char
) และเก็บข้อมูลในรูปแบบอาเรย์ ดังนั้นเราสามารถเข้าถึงตัวอักษรใดๆ ของ String ได้ด้วย Index ของมันในรูปแบบ str[index]
โดยที่ Index จะเริ่มต้นจาก 0
ในตัวอย่างนี้เราจะมาเขียนโปรแกรมเพื่อเข้าตัวอักษรที่ตำแหน่งต่างๆ ของ String
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "marcuscode";
char first = str[0];
char third = str[2];
char last = str[str.length() - 1];
cout << "The first character is " << first << endl;
cout << "The third character is " << third << endl;
cout << "The last character is " << last << endl;
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
The first character is m
The third character is r
The last character is e
ในตัวอย่างนี้ แสดงการเข้าถึงตัวอักษรของ String ด้วย Index ของมัน เราได้ประกาศตัวแปร str
สำหรับเก็บค่าของ String ที่มีค่าเป็น "marcuscode"
char first = str[0];
char third = str[2];
char last = str[str.length() - 1];
จากนั้นเข้าถึงตัวอักษรตัวแรก ตัวที่สาม และตัวสุดท้ายใน String และนำมาเก็บไว้ในตัวแปร char
เนื่องจาก Index ของ String เริ่มต้นจาก 0 ดังนั้นเพื่อเขาถึงตัวอักษรที่ตำแหน่งแรกเราใช้ str[0]
และเช่นเดียวกันสำหรับตัวอักษรที่สองจะผ่านทาง str[1]
สำหรับการเข้าถึงอักษรตัวสุดท้ายใน String สามารถหา Index ของมันได้จากความยาวของ String ลบด้วย 1
เนื่องจาก String เก็บข้อมูลในรูปแบบของ Index ที่เรียงลำดับต่อเนื่องกัน นั่นทำให้เราสามารถใช้คำสั่ง for loop เพื่อวนตัวอักษรทั้งหมดใน String ได้ ในตัวอย่างนี้เป็นการเขียนโปรแกรมสำหรับทำ Reverse string ในภาษา C++
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "marcuscode";
string rev = "";
for (int i = str.length() - 1; i >= 0; i--) {
rev += str[i];
}
cout << "Original: " << str << endl;
cout << "Reversed: " << rev << endl;
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Original: marcuscode
Reversed: edocsucram
เราใช้คำสั่ง for loop วนเริ่มจากตัวอักษรตัวสุดท้ายใน String และนำมาเชื่อมต่อเข้ากับตัวแปร String ใหม่ที่สร้างขึ้นมา เมื่อการทำงานของลูปสิ้นสุดลงเราจะได้ Reverse string ของ "marcuscode"
เก็บในตัวแปร rev
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ String ในภาษา C++ เราได้พูดถึงการประกาศและใช้งาน String ในการเขียนโปรแกรม การทำงานที่จำเป็นเกี่ยวกับ String เช่น การหาความยาว การเชื่อมต่อ และการเปรียบเทียบ String เป็นต้น ซึ่งนี่เป็นเรื่องพื้นฐานที่จำเป็นต้องทราบเมื่อทำงานกับ String