Як здійснити перебір слів рядка?
Я намагаюся перебирати слова рядка.
Можна вважати, що рядок складається зі слів, відокремлених пропуском.
Зауважте, що мене не цікавлять рядкові функції C або подібні маніпуляції з символами/доступ до них. Також, будь ласка, віддайте перевагу елегантності над ефективністю у вашій відповіді.
Найкраще рішення, яке я маю на даний момент:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
string s = "Somewhere down the road";
istringstream iss(s);
do
{
string subs;
iss >> subs;
cout << "Substring: " << subs << endl;
} while (iss);
}
Чи є більш елегантний спосіб зробити це?
2885
3
Це мій улюблений спосіб ітерації по рядку. Ви можете робити все, що завгодно з кожним словом.
Такого методу НТЛ ще не має в своєму розпорядженні.
Однак, ви можете або використовувати функцію C's [
strtok()
][1], використовуючи член [std::string::c_str()
][2], або написати свою власну. Ось приклад коду, який я знайшов після швидкого пошуку в Google ("STL string split"):Взято з:
Якщо у вас виникли питання щодо прикладу коду, залиште коментар і я поясню.
І те, що в ньому не реалізовано ітератор з іменем типу
typedef
або перевантажено оператор `Використання
std::stringstream
, як у вас, працює чудово, і робить саме те, що ви хотіли. Якщо ви просто шукаєте інший спосіб, ви можете використовувати [std::find()
][1]/[std::find_first_of()
][2] та [std::string::substr()
][3].Ось приклад: