การทำให้ตัวอักษรเป็นตัวพิมพ์ใหญ่ในสตริง

C++:
การทำให้ตัวอักษรเป็นตัวพิมพ์ใหญ่ในสตริง

วิธีการ:

ใน C++ คุณสามารถทำให้สตริงมีตัวอักษรต้นเป็นตัวพิมพ์ใหญ่โดยใช้ไลบรารีมาตรฐาน โดยปราศจากความจำเป็นต้องใช้ไลบรารีของบุคคลที่สาม อย่างไรก็ตามสำหรับพฤติกรรมการทำให้ตัวพิมพ์ใหญ่ที่ซับซ้อนหรือเฉพาะเจาะจงมากขึ้น ไลบรารีเช่น Boost อาจช่วยได้มาก ด้านล่างนี้เป็นตัวอย่างที่แสดงทั้งสองวิธีการ

การใช้ไลบรารีมาตรฐานของ C++:

#include <iostream>
#include <cctype> // สำหรับ std::tolower และ std::toupper
#include <string>

std::string capitalizeString(const std::string& input) {
    std::string result;
    bool capitalizeNext = true;

    for (char ch : input) {
        if (std::isspace(ch)) {
            capitalizeNext = true;
        } else if (capitalizeNext) {
            ch = std::toupper(ch);
            capitalizeNext = false;
        }
        result += ch;
    }

    return result;
}

int main() {
    std::string text = "hello world from c++";
    std::string capitalizedText = capitalizeString(text);
    std::cout << capitalizedText << std::endl; // ผลลัพธ์: "Hello World From C++"
}

การใช้ไลบรารี Boost:

สำหรับการจัดการสตริงขั้นสูงมากขึ้น รวมถึงการทำให้ตัวพิมพ์เป็นพิเศษที่ตระหนักถึง locale คุณอาจต้องการใช้ไลบรารี Boost String Algo

เริ่มแรก ตรวจสอบให้แน่ใจว่าคุณมีไลบรารี Boost ติดตั้งและปรับแต่งในโปรเจกต์ของคุณแล้ว จากนั้นคุณสามารถรวมหัวข้อที่จำเป็นและใช้คุณสมบัติของมันตามที่แสดงด้านล่าง

#include <boost/algorithm/string.hpp>
#include <iostream>
#include <string>

int main() {
    std::string text = "hello world from c++";
    std::string capitalizedText = text;

    // ทำให้ตัวอักษรตัวแรกของแต่ละคำเป็นตัวใหญ่
    boost::algorithm::to_lower(capitalizedText); // ทำให้แน่ใจว่าสตริงอยู่ในรูปตัวพิมพ์เล็ก
    capitalizedText[0] = std::toupper(capitalizedText[0]); // ทำให้ตัวอักษรตัวแรกเป็นตัวใหญ่

    for (std::size_t i = 1; i < capitalizedText.length(); ++i) {
        if (isspace(capitalizedText[i - 1])) { // ทำให้ตัวพิมพ์ใหญ่หลังจากช่องว่าง
            capitalizedText[i] = std::toupper(capitalizedText[i]);
        }
    }

    std::cout << capitalizedText << std::endl; // ผลลัพธ์: "Hello World From C++"
}

ในกรณีนี้ Boost ทำให้บางงานการจัดการสตริงง่ายขึ้น แต่ยังคงต้องการวิธีการที่เฉพาะเจาะจงสำหรับการทำให้เป็นตัวพิมพ์ใหญ่อย่างแท้จริงเนื่องจากมันเสนอความสามารถในการเปลี่ยนแปลงและการแปลงเคสเป็นหลัก