String ในภาษา C++

2 January 2021

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ 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 ออกทางหน้าจอ

create_string.cpp
#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++

string_length.cpp
#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++

string_concatenation.cpp
#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++ เราจะแสดงการเปรียบเทียบหลายแบบเพื่อให้คุณเห็นผลลัพธ์การทำงานของเมธอดในรูปแบบต่างๆ นี่เป็นตัวอย่าง

string_comparison.cpp
#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

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

login.cpp
#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

string_charecters.cpp
#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++

string_reverse.cpp
#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

บทความนี้เป็นประโยชน์หรือไม่?Yes·No