Подскажите, а способа как использовать <vector> для разделения нужной мне строки на подстроки, которые будут заноситься в массив, нет?
Нужно из:
"Привет; Как; Дела"
Получить:
str[0]="Привет";
str[1]="Как";
str[2]="Дела";
Как в PHP - explode, а C# - split
Вроде это то, что вы хотели:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main ()
{
vector<string> arr;
string str ("Привет; Как; Дела");
string delim("; ");
size_t prev = 0;
size_t next;
size_t delta = delim.length();
while( ( next = str.find( delim, prev ) ) != string::npos ){
//Отладка-start
string tmp = str.substr( prev, next-prev );
cout << tmp << endl;
//Отладка-end
arr.push_back( str.substr( prev, next-prev ) );
prev = next + delta;
}
//Отладка-start
string tmp = str.substr( prev );
cout << tmp << endl;
//Отладка-end
arr.push_back( str.substr( prev ) );
return 0;
}
Стандартного способа нет. Нужно 1) либо писать свою функцию, 2) либо подключать внешнюю библиотеку, 3) либо преобразовывать std::string
в c_str
и использовать strtok
. Например,
char *s = new char[source.size() + 1];
strcpy(s, source.c_str());
char *p = strtok(s, ";");
while (p! = NULL) {
cout << p << endl;
p = strtok(NULL, ";");
}
delete[] s;
Более "C++
" способ следующий:
std::string sentence = "Hello how are you";
std::istringstream iss(sentence);
std::vector<std::string> tokens;
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter<std::vector<std::string> >(tokens));
В этом случае, правда, нельзя указать свой собственный разделитель. В качестве более удобной альтернативы могу предложить boost::string_algo
.
Такая реализация работает даже на msvc2010
std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems)
{
std::stringstream ss(s);
std::string item;
while (std::getline(ss, item, delim))
{
elems.push_back(item);
}
return elems;
}
std::vector<std::string> split(const std::string &s, char delim)
{
std::vector<std::string> elems;
split(s, delim, elems);
return elems;
}
int main(int argc, char** argv)
{
std::string sText;
std::getline(std::cin, sText);
std::vector<std::string> sWords = split(sText, ';');
return 0;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Решение задачи проходит только на 67,20 из 100И я совершенно не могу понять в чем проблема, перепробовал все что знаю, иногда выдает неправильный...
Вопрос от новичка, как сделать превью статьи с кнопкой "Read more", используя PHP? Знаю, что функцией substr, но не могу понять что к чему