วิธีแยกสตริงใน C ++

How Split String C



การทำงานกับข้อมูลสตริงเป็นส่วนสำคัญของภาษาการเขียนโปรแกรมใดๆ บางครั้งเราจำเป็นต้องแยกข้อมูลสตริงเพื่อวัตถุประสงค์ในการเขียนโปรแกรม ฟังก์ชัน split() มีอยู่ในภาษาโปรแกรมหลายภาษาเพื่อแบ่งสตริงออกเป็นหลายส่วน ไม่มีฟังก์ชัน split() ในตัวใน C++ สำหรับการแยกสตริง แต่มีหลายวิธีใน C++ เพื่อทำงานเดียวกัน เช่น การใช้ getline() การทำงาน, strtok() ฟังก์ชันโดยใช้ หา() และ ลบ() ฟังก์ชัน ฯลฯ มีการอธิบายการใช้ฟังก์ชันเหล่านี้เพื่อแยกสตริงใน C++ ในบทช่วยสอนนี้

ข้อกำหนดเบื้องต้น

ก่อนตรวจสอบตัวอย่างของบทช่วยสอนนี้ คุณต้องตรวจสอบก่อนว่าคอมไพเลอร์ g++ ติดตั้งหรือไม่อยู่ในระบบ หากคุณกำลังใช้ Visual Studio Code ให้ติดตั้งส่วนขยายที่จำเป็นเพื่อคอมไพล์ซอร์สโค้ด C++ เพื่อสร้างโค้ดที่เรียกใช้งานได้ ที่นี่ แอปพลิเคชัน Visual Studio Code ถูกใช้เพื่อคอมไพล์และรันโค้ด C++







แยกสตริงโดยใช้ฟังก์ชัน getline()

ฟังก์ชัน getline() ใช้เพื่ออ่านอักขระจากสตริงหรือเนื้อหาไฟล์ จนกว่าจะพบตัวคั่นหรือตัวคั่นเฉพาะ และจัดเก็บสตริงการแยกวิเคราะห์แต่ละสตริงลงในตัวแปรสตริงอื่น ฟังก์ชันจะทำงานต่อไปจนกว่าจะแยกวิเคราะห์เนื้อหาทั้งหมดของสตริงหรือไฟล์ ไวยากรณ์ของฟังก์ชันนี้ได้รับด้านล่าง



ไวยากรณ์:



ไอสตรีม&getline(ไอสตรีม&คือสตริง&สตริcharเดลิม);

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





สร้างไฟล์ C ++ ด้วยรหัสต่อไปนี้เพื่อแยกสตริงตามตัวคั่นช่องว่างโดยใช้ getline() การทำงาน. ค่าสตริงของคำหลายคำถูกกำหนดให้เป็นตัวแปร และมีการใช้ช่องว่างเป็นตัวคั่น มีการประกาศตัวแปรเวกเตอร์เพื่อเก็บคำที่แยกออกมา ถัดไป วง 'for' ใช้เพื่อพิมพ์แต่ละค่าจากอาร์เรย์เวกเตอร์

//รวมไลบรารีที่จำเป็น
#รวม
#รวม
#รวม
#รวม

intหลัก()
{
//กำหนดข้อมูลสตริงที่จะแยกออก
ชั่วโมง::สตริงstrData= 'เรียนรู้การเขียนโปรแกรม C++';
//กำหนดข้อมูลเนื้อหาที่จะทำงานเป็นตัวคั่น
const charตัวคั่น= '';
//กำหนดตัวแปรอาร์เรย์ไดนามิกของสตริง
ชั่วโมง::เวกเตอร์outputArray;
//สร้างกระแสจากสตริง
ชั่วโมง::สายน้ำstreamData(strData);
/ *
ประกาศตัวแปรสตริงที่จะใช้
เพื่อเก็บข้อมูลหลังจากแยกออก
* /

ชั่วโมง::สตริงชั่วโมง;
/ *
วงจะวนซ้ำข้อมูลที่แยกและ
ใส่ข้อมูลลงในอาร์เรย์
* /

ในขณะที่ (ชั่วโมง::getline(streamData, val, ตัวคั่น)) {
เอาต์พุตอาร์เรย์push_back(ชั่วโมง);
}
//พิมพ์ข้อมูลที่แยกออกมา
ชั่วโมง::ค่าใช้จ่าย << 'สตริงเดิมคือ:' <<strData<<ชั่วโมง::endl;
// อ่านอาร์เรย์และพิมพ์ข้อมูลที่แยกออก
ชั่วโมง::ค่าใช้จ่าย << 'NSค่าหลังจากแยกสตริงตามช่องว่าง:' <<ชั่วโมง::endl;
สำหรับ (รถยนต์ &ชั่วโมง:outputArray) {
ชั่วโมง::ค่าใช้จ่าย <<ชั่วโมง<<ชั่วโมง::endl;
}
กลับ 0;
}

เอาท์พุท:



ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันโค้ดด้านบน

แยกสตริงโดยใช้ฟังก์ชัน strtok()

ฟังก์ชัน strtok() สามารถใช้เพื่อแยกสตริงโดยการแปลงส่วนของสตริงตามตัวคั่น จะส่งกลับตัวชี้ไปยังโทเค็นถัดไปหากมีอยู่ มิฉะนั้นจะส่งกลับค่า NULL NS string.h จำเป็นต้องใช้ไฟล์ส่วนหัวเพื่อใช้ฟังก์ชันนี้ การวนซ้ำจะต้องอ่านค่าที่แยกจากสตริงทั้งหมด อาร์กิวเมนต์แรกมีค่าสตริงที่จะแยกวิเคราะห์ และอาร์กิวเมนต์ที่สองมีตัวคั่นที่จะใช้เพื่อสร้างโทเค็น ไวยากรณ์ของฟังก์ชันนี้ได้รับด้านล่าง

ไวยากรณ์:

char * strtok ( char *สตริconst char *ตัวคั่น);

สร้างไฟล์ C++ ด้วยรหัสต่อไปนี้เพื่อแยกสตริงโดยใช้ฟังก์ชัน strtok() อาร์เรย์ของอักขระถูกกำหนดในโค้ดที่มีโคลอน (':') เป็นตัวคั่น ต่อไป strtok() ฟังก์ชันถูกเรียกใช้ด้วยค่าสตริงและตัวคั่นเพื่อสร้างโทเค็นแรก NS ' ในขณะที่ ' วงถูกกำหนดเพื่อสร้างโทเค็นอื่น ๆ และค่าโทเค็นจนกว่า โมฆะ จะพบค่า

//รวมไลบรารีที่จำเป็น
#รวม
#รวม

intหลัก()
{
//ประกาศอาร์เรย์ของอักขระ
charstrArray[] = 'Mehrab Hossain :IT Professional : [email protected] :+8801726783423';
//ส่งคืนค่าโทเค็นแรกตาม ':'
char *tokenValue= strtok(สตรอเรย์,':');
//เริ่มต้นตัวแปรตัวนับ
intเคาน์เตอร์= 1;
/ *
วนซ้ำเพื่อพิมพ์ค่าโทเค็น
และแยกข้อมูลสตริงที่เหลือเพื่อรับ
มูลค่าโทเค็นถัดไป
* /

ในขณะที่ (tokenValue!= โมฆะ)
{
ถ้า(เคาน์เตอร์== 1)
printf('ชื่อ : %sNS', tokenValue);
อื่น ถ้า(เคาน์เตอร์== 2)
printf('อาชีพ : %sNS', tokenValue);
อื่น ถ้า(เคาน์เตอร์== 3)
printf('อีเมล : %sNS', tokenValue);
อื่น
printf('เบอร์มือถือ : %sNS', tokenValue);
tokenValue= strtok(โมฆะ,':');
เคาน์เตอร์++;
}
กลับ 0;
}

เอาท์พุท:

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันโค้ดด้านบน

แยกสตริงโดยใช้ฟังก์ชัน find() และ Erase()

สตริงสามารถแยกออกเป็น C ++ โดยใช้ฟังก์ชัน find() และ Erase() สร้างไฟล์ C++ ด้วยรหัสต่อไปนี้เพื่อตรวจสอบการใช้ฟังก์ชัน find() และ Erase() เพื่อแยกค่าสตริงตามตัวคั่นเฉพาะ ค่าโทเค็นถูกสร้างขึ้นโดยการค้นหาตำแหน่งตัวคั่นโดยใช้ฟังก์ชัน find() และค่าโทเค็นจะถูกเก็บไว้หลังจากลบตัวคั่นโดยใช้ฟังก์ชัน Erase() งานนี้จะถูกทำซ้ำจนกว่าจะแยกวิเคราะห์เนื้อหาทั้งหมดของสตริง ถัดไป ค่าของอาร์เรย์เวกเตอร์จะถูกพิมพ์

//รวมไลบรารีที่จำเป็น
#รวม
#รวม
#รวม

intหลัก(){
//กำหนดสตริง
ชั่วโมง::สตริงstringData= 'บังคลาเทศและญี่ปุ่นและเยอรมนีและบราซิล';
//กำหนดตัวคั่น
ชั่วโมง::สตริงตัวคั่น= 'และ';
//ประกาศตัวแปรเวกเตอร์
ชั่วโมง::เวกเตอร์ประเทศ{};
//ประกาศตัวแปรจำนวนเต็ม
intตำแหน่ง;
//ประกาศตัวแปรสตริง
ชั่วโมง::สตริงoutstr โทเค็น;

/ *
แยกสตริงโดยใช้ฟังก์ชัน substr()
และเพิ่มคำที่แยกออกเป็นเวกเตอร์
* /

ในขณะที่ ((ตำแหน่ง=ข้อมูลสตริงหา(ตัวคั่น)) !=ชั่วโมง::สตริง::นโป้) {
โทเค็น=ข้อมูลสตริงย่อย(0, ตำแหน่ง);
//เอาช่องว่างส่วนเกินออกจากด้านหน้าของสตริงที่แยกออก
ประเทศ.push_back(โทเค็นลบ(0, โทเค็นfind_first_not_of('')));
ข้อมูลสตริงลบ(0, ตำแหน่ง+ตัวคั่นระยะเวลา());
}
//พิมพ์คำที่แยกออกมาทั้งหมด ยกเว้นคำสุดท้าย
สำหรับ (const รถยนต์ &outstr:ประเทศ) {
ชั่วโมง::ค่าใช้จ่าย <<outstr<<ชั่วโมง::endl;
}
//พิมพ์คำที่แยกออกมาล่าสุด
ชั่วโมง::ค่าใช้จ่าย <<ข้อมูลสตริงลบ(0, ข้อมูลสตริงfind_first_not_of('')) <<ชั่วโมง::endl;
กลับ 0;
}

เอาท์พุท:

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้นหลังจากรันโค้ดด้านบน

บทสรุป

สามวิธีในการแยกสตริงใน C ++ ได้รับการอธิบายในบทช่วยสอนนี้โดยใช้ตัวอย่างง่ายๆ เพื่อช่วยให้ผู้ใช้ python ใหม่ดำเนินการแยกส่วนอย่างง่ายดายใน C ++