Работа с векторами на STL С++ (Занесение в вектор разабранной на слова строки)
Модератор: Модераторы разделов
-
MPak
- Сообщения: 24
Работа с векторами на STL С++
Писал на с++ лабу в универ и задался вопросом: Есть ли в STL функция разбиения строки на слова с последующим занесением их в вектор. Т.Е. взять строку например "fff,a,gg.hj el ew gfgsg, . esgt:gew ; "
и получить:
"fff"
"a"
"gg"
"hj" и т.д. как элементы вектора vector<string> v;
Искал и продолжаю искать, но пока не нашел...
и получить:
"fff"
"a"
"gg"
"hj" и т.д. как элементы вектора vector<string> v;
Искал и продолжаю искать, но пока не нашел...
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
Zmoukie
- Сообщения: 29
Re: Работа с векторами на STL С++
Example
Output
Tokens:
A
string
of
tokens
and
some
more
tokens
Пример из MSDN. На STL переведешь сам?
Код: Выделить всё
./ crt_strtok.c
/* In this program, a loop uses strtok
* to print all the tokens (separated by commas
* or blanks) in the string named "string".
*/
#include <string.h>
#include <stdio.h>
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
int main( void )
{
printf( "Tokens:\n" );
/* Establish string and get the first token: */
token = strtok( string, seps );
while( token != NULL )
{
/* While there are tokens in "string" */
printf( " %s\n", token );
/* Get next token: */
token = strtok( NULL, seps );
}
}Output
Tokens:
A
string
of
tokens
and
some
more
tokens
Пример из MSDN. На STL переведешь сам?
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Работа с векторами на STL С++
MPak писал(а): ↑04.11.2005 15:26Писал на с++ лабу в универ и задался вопросом: Есть ли в STL функция разбиения строки на слова с последующим занесением их в вектор. Т.Е. взять строку например "fff,a,gg.hj el ew gfgsg, . esgt:gew ; "
и получить:
"fff"
"a"
"gg"
"hj" и т.д. как элементы вектора vector<string> v;
Искал и продолжаю искать, но пока не нашел...
Увы, нет. Советую обратиться к BOOST - эта библиотека близка к стандарту языка, а также к STL по духу, использует/расширяет STL. В этом случае вам поможет boost::tokenizer. Ну а разложить токены в std::vector - уже не проблема.
Если использование Буста недопустимо - то, имхо, вполне нормальное решение использовать strtok() из libc.
Во, кстати, и пример с strtok() уже запостили...
-
MPak
- Сообщения: 24
Re: Работа с векторами на STL С++
СпасиБо большое за помощЬ, но разбил я вектор уже через parse_str():
void parse_str(string str, vector<string> &vect)
{
std::string::size_type i(0),tmp;
do
{
tmp=str.find_first_of(" ,.:;", i);
vect.push_back(str.substr(i,tmp == std::string::npos ? tmp : tmp -i));
i=tmp+1;
}
while( tmp != std::string::npos );
}
теперь стоит проблема отсортировать по частоте встречаемости...
Тож хотелось бы через STL'ку
Кстати, а что такое BOOST
void parse_str(string str, vector<string> &vect)
{
std::string::size_type i(0),tmp;
do
{
tmp=str.find_first_of(" ,.:;", i);
vect.push_back(str.substr(i,tmp == std::string::npos ? tmp : tmp -i));
i=tmp+1;
}
while( tmp != std::string::npos );
}
теперь стоит проблема отсортировать по частоте встречаемости...
Тож хотелось бы через STL'ку
Кстати, а что такое BOOST
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Работа с векторами на STL С++
MPak писал(а): ↑04.11.2005 21:45void parse_str(string str, vector<string> &vect)
{
std::string::size_type i(0),tmp;
do
{
tmp=str.find_first_of(" ,.:;", i);
vect.push_back(str.substr(i,tmp == std::string::npos ? tmp : tmp -i));
i=tmp+1;
}
while( tmp != std::string::npos );
}
теперь стоит проблема отсортировать по частоте встречаемости...
Тож хотелось бы через STL'ку
Думаю, что нужно считать число вхождений токена в строку. А в вектор (то есть уже не в вектор, а в карту например - или же в вектор из std::pair) пихать токен и кол-во его вхождений. Потом остаёться лишь сделать обычную сортировку через свой предикат.
У-у, это такая штука... Лучше сам посмотри: http://boost.org
-
oav
- Бывший модератор
- Сообщения: 296
Re: Работа с векторами на STL С++
Код: Выделить всё
std::string val( "aa,bb,cc" );
std::vector<std::string> values;
boost::algorithm::split( values , val , algorithm::is_any_of( "," ));-
MPak
- Сообщения: 24
Re: Работа с векторами на STL С++
oav serzh-z
Спасибо большое за помощь!!!
Кстати, можно существенно продлить срок службы клавиатуры, если каждый раз не писать std::...
, а один раз написать
using namespace std;
Спасибо большое за помощь!!!
Кстати, можно существенно продлить срок службы клавиатуры, если каждый раз не писать std::...
std::string val( "aa,bb,cc" );
, а один раз написать
using namespace std;
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
d_Sun
- Сообщения: 291
Re: Работа с векторами на STL С++
Что правда?
Моя подпись сильно длинная :)
-
oav
- Бывший модератор
- Сообщения: 296
Re: Работа с векторами на STL С++
Я стиль кодирования никому не навязываю, пишите как считаете лучше и берегите клавиатуры если вам их жалко
-
serzh-z
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: Работа с векторами на STL С++
Угу... пока сам не натрахаешься с конфликтом имён - будешь использовать using и избегать использования std::... Ты посмотри сколько в STL имён, которые ты можешь захотеть использовать с своём коде. Потом решишь, что проще сразу пять символов добавить, чем потом - при рефакторинге.
-
oav
- Бывший модератор
- Сообщения: 296
Re: Работа с векторами на STL С++
serzh-z писал(а): ↑07.11.2005 17:16Угу... пока сам не натрахаешься с конфликтом имён - будешь использовать using и избегать использования std::... Ты посмотри сколько в STL имён, которые ты можешь захотеть использовать с своём коде. Потом решишь, что проще сразу пять символов добавить, чем потом - при рефакторинге.Во втором случае и клава будет живее и нервы целее.
-
d_Sun
- Сообщения: 291
Re: Работа с векторами на STL С++
serzh-z писал(а): ↑07.11.2005 17:16Угу... пока сам не натрахаешься с конфликтом имён - будешь использовать using и избегать использования std::... Ты посмотри сколько в STL имён, которые ты можешь захотеть использовать с своём коде. Потом решишь, что проще сразу пять символов добавить, чем потом - при рефакторинге.В первом случае и клава будет живее и нервы целее.
При грамотном использовании пространств имен можно свободно использовать using...
Моя подпись сильно длинная :)
-
oav
- Бывший модератор
- Сообщения: 296
-
d_Sun
- Сообщения: 291
Re: Работа с векторами на STL С++
Я имел в виду то, что те Ваши имена которые возможно будут перекрываться с STD просто помещаете в свое пространство имен
Моя подпись сильно длинная :)
-
oav
- Бывший модератор
- Сообщения: 296
Re: Работа с векторами на STL С++
и чем лучше писать my_namespace::string но при этом не писать std::string?
и кто будет следить за тем кто и где и в каком порядке вводит using? Нет, если проект пишет один человек - это нормально наверно (пока проект не подростет), но в реальных условиях есть много граблей на которые можно наступить. За подробностями к Саттеру и компании. Как бы я ничего не навязываю - просто советую
-
MPak
- Сообщения: 24
Re: Работа с векторами на STL С++
и чем лучше писать my_namespace::string но при этом не писать std::string?
и кто будет следить за тем кто и где и в каком порядке вводит using? Нет, если проект пишет один человек - это нормально наверно (пока проект не подростет), но в реальных условиях есть много граблей на которые можно наступить. За подробностями к Саттеру и компании. Как бы я ничего не навязываю - просто советую
Теперь я не понял что имелось ввиду.
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
d_Sun
- Сообщения: 291
-
MPak
- Сообщения: 24
Re: Работа с векторами на STL С++
Вот решение этой задачи
ЭТО- РУССКИЙ ТАНК
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
.............._~__
........___/__o_\=====>>>
......./||||||||||||||||\
......(@@@@@@@@@)
Скопируйте его в свою подпись чтобу предотвратить
Доминацию над миром Американского кролика Банни
-
Zeus
- Сообщения: 694
Re: Работа с векторами на STL С++
MPak писал(а): ↑04.11.2005 15:26Писал на с++ лабу в универ и задался вопросом: Есть ли в STL функция разбиения строки на слова с последующим занесением их в вектор. Т.Е. взять строку например "fff,a,gg.hj el ew gfgsg, . esgt:gew ; "
и получить:
"fff"
"a"
"gg"
"hj" и т.д. как элементы вектора vector<string> v;
Искал и продолжаю искать, но пока не нашел...
Вроде у Страуструпа подобных примеров было: или про строки или про контейнеры.