สมมติว่าเรามีสตริงที่มีจำนวนเต็มไม่กี่ตัวที่คั่นด้วยเครื่องหมายจุลภาค เราจะต้องแยกมันออกและแสดงจำนวนเต็มแต่ละตัวในบรรทัดที่ต่างกัน ในการทำเช่นนี้เราจะใช้ stringstream (ภายใต้ไลบรารี sstream) ใน C++ นี่คือคลาสสตรีมที่ใช้สตริงหนึ่งรายการใน C ++ เราสามารถใช้ตัวดำเนินการแยก (<<) เพื่อแยกบางสิ่ง ตัวดำเนินการแทรก (>>) เพื่อแทรกบางสิ่ง และฟังก์ชัน str() เพื่อตั้งค่าเนื้อหาของวัตถุอุปกรณ์สตริงพื้นฐาน
ดังนั้น หากอินพุตเป็น s ="56,9,85,256,47" ผลลัพธ์จะเป็น
56 9 85 256 47
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดอาร์เรย์ take_int(string str)
-
สร้างวัตถุสตริงสตรีมที่เรียกว่า ss
-
กำหนดผลลัพธ์อาร์เรย์
-
ในขณะที่รายการจำนวนเต็มใหม่ที่นำมาจาก ss เป็น temp ไม่เป็นค่าว่างให้ทำ:
-
แทรก tmp ที่ส่วนท้ายของผลลัพธ์
-
ข้ามอักขระลูกน้ำโดยนำอักขระตัวเดียวออก
-
-
ส่งคืนผลลัพธ์
-
-
จากวิธีหลัก ให้ทำดังนี้:
-
กำหนดจำนวนเต็มอาร์เรย์ =take_int(s)
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของจำนวนเต็ม ให้อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ:
-
แสดงจำนวนเต็ม[i]
-
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
vector<int> take_int(string str) {
stringstream ss(str);
vector<int> result;
char ch;
int tmp;
while(ss >> tmp) {
result.push_back(tmp);
ss >> ch;
}
return result;
}
int main(){
string s = "56,9,85,256,47";
vector<int> integers = take_int(s);
for(int i = 0; i < integers.size(); i++)
cout << integers[i] << "\n";
}
อินพุต
56,9,85,256,47
ผลลัพธ์
56 9 85 256 47