विषय पर बढ़ें

अंतिम अद्यतन: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 प्राप्त किया जा सकता है।

संबंधित विषय

टिप्पणियाँ