अंतिम अद्यतन:2026-10-12
C++ string के छह split तरीके¶
आमतौर पर development में हम एक लंबी string को delimiter के आधार पर split करते हैं, जिससे हमें अपनी इच्छित strings मिलती हैं, सब कहते हैं कि C++ में string splitting उतनी सुविधाजनक नहीं, आज string split करने के 5 तरीकों का सार देते हैं।
इसमें C++11 से C++20 तक के तरीके, और C style शामिल हैं।
आगे के लेख की व्याख्या में सुविधा के लिए, पहले एक function prototype define करते हैं:
-
Parameters: दो strings, एक original string दर्शाती है, दूसरी delimiter
-
Return value: strings का array
नोट: आराम पसंद करने वालों के लिए, 星球 से पूरा code प्राप्त किया जा सकता है।
1. find से split¶
पहला तरीका वही है जो सब आमतौर पर उपयोग करते हैं, पहले delimiter की position ढूंढें, फिर string को बाँटें, array में जोड़ें, इस तरह नीचे का code बना।
nt start = 0;
int end = s.find(delim);
std::vector<std::string> result;
while (end != std::string::npos) {
result.push_back(s.substr(start, end - start));
start = end + delim.size();
end = s.find(delim, start);
}
result.push_back(s.substr(start, end - start));
क्या इस तरीके को और optimize किया जा सकता है?
उत्तर है हाँ, code को और सुंदर दिखाने के लिए, हम हर बार आगे वाला output किया गया substring delete कर सकते हैं, और find का logic वही रहता है।
while (end != std::string::npos) {
result.push_back(s.substr(0, end));
s.erase(0, end + delim.size());
end = s.find(delim);
}
2. C++20 Ranges और Views से split¶
C++20 में हम std::ranges::views::split() से delimiter का view बना सकते हैं, फिर transform उपयोग करके हर subview को std::string में बदल सकते हैं।
auto split_transform_view = s | std::ranges::views::split(delim) |
std::ranges::views::transform([](auto&& str) {
return std::string(str.begin(), str.end());
});
बहुत सरल है न, कुछ लोगों को समझ नहीं आया होगा, कोई बात नहीं, पहले के C++20 लेख पढ़ लें।
3. Regex से split¶
std::regex object से delimiter का pattern construct करें, std::sregex_token_iterator से regex expression pattern से बँटी sub-strings को traverse करें, -1 का मतलब है non-matching strings निकालना, यानी delimiter के अलावा की strings।
std::regex r(delim);
return {std::sregex_token_iterator(s.begin(), s.end(), r, -1),
std::sregex_token_iterator()};
4. istringstream से split¶
getline हर बार केवल एक delimiter पास कर सकता है, इसलिए split के बाद, आगे के delimiters को skip करना पड़ता है।
std::istringstream ss(s);
while (std::getline(ss, token, *(it = delim.begin()))) {
result.push_back(token);
it++;
while (it != delim.end() && ss.peek() == *(it)) {
it++;
ss.get();
}
}
5. C style का strtok से split¶
strtok() से string को tokens में बाँटें, फिर while loop से एक-एक करके निकालें।
token = strtok((char*)s.c_str(), delim.c_str());
while (token != NULL) {
result.push_back(token);
token = strtok(NULL, delim.c_str());
}
ये थे आमतौर पर उपयोग होने वाले कुछ तरीके, क्या आपके पास कोई और तरीका है? comments में मिलते हैं, इस section का आराम वाला संस्करण 星球 से पूरा code प्राप्त किया जा सकता है।
संबंधित विषय¶
- CPython extension development notes | C++那些事
- libcurl C++ development notes | C++那些事
- Open source C++ code कैसे पढ़ें | C++那些事
- एक दिलचस्प C++ code | C++那些事
- C++ loop के बिना 1-100 print करना | C++那些事