تقسيم سلسلة نصية في C++ باستخدام فاصل (string delimiter) — كيف يتم split؟
مرحبًا بالجميع! لقد بدأت للتو في تعلم C++ وواجهت مهمة يتم حلها في لغات أخرى بوظيفة واحدة. أحتاج إلى تقسيم سلسلة نصية إلى أجزاء بناءً على فاصل (مثل فاصلة أو سلسلة فرعية "::").
في Python أكتب `"a,b,c".split(",")` وأحصل على قائمة. في C++ لا أجد شيئًا مشابهًا في المكتبة القياسية. يوجد `strtok` من C، لكنه يعمل مع `char*`، بينما أحتاج للعمل مع `std::string`. بالإضافة إلى ذلك، `strtok` يعدل السلسلة الأصلية وليس آمنًا للخيوط.
حاولت كتابة حل خاص بي لكنه يعمل بشكل غير صحيح:
```cpp
#include
#include
std::vector split(std::string s, std::string delimiter) {
size_t pos = 0;
std::vector tokens;
while ((pos = s.find(delimiter)) != std::string::npos) {
std::string token = s.substr(0, pos);
tokens.push_back(token);
s.erase(0, pos + delimiter.length());
}
tokens.push_back(s);
return tokens;
}
```