Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
Zgugu Bamba
0 / 0 / 0
Регистрация: 18.07.2011
Сообщений: 7
1

Извлечь элемент из вектора

18.07.2011, 14:22. Просмотров 1958. Ответов 6
Метки нет (Все метки)

Пожалуйста, помогите разобраться.
Это функция разбивки строки на лексемы, и копирования результатов разбивки в вектор.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void Tokenize(const string& str, vektor<string>&tk,  const string& delimiters = "")
{
    string::size_type lastPos =0;   
    lastPos = str.find_first_not_of(delimiters);    
 
    while (lastPos != string::npos   )
    {
    string::size_type pos = str.find_first_of(delimiters, lastPos);
 
       vektor.push_back( str.substr(lastPos, pos - lastPos);     
        
        lastPos = str.find_first_not_of(delimiters, pos); 
       
    }
        
}
 
 
 int main() {
 
string a("Lorem ipsum dolor sit amet, consectetur adipiscing elit, set eiusmod tempor ");
 
vector<string>v;
 
Tokenize(a,v,"");
 
for(int i = 0;i < v.size(); i++)
cout<<v[i];
 
}
Вопрос:
Почему нельзя извлечь какую-то одну лексему из вектора, например, напр. v[4]?
Может быть есть другой способ загрузить строку в вектор так,чтобы потом можно было
извлечь из него отдельные лексемы этой строки?

 Комментарий модератора 
Используйте теги форматирования кода!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2011, 14:22
Ответы с готовыми решениями:

Определить количество положительных элементов вектора С(10) и заменить этим значением минимальный элемент вектора А(5)
Ребята помогите пожалуйста с задачкой. Я сам не шарю в C++, но в этом семестре...

Как правильно извлечь данные из вектора и поместить в обект CStepMove
Дорого времени суток. В общем у меня такая проблемма. Есть родительский класс...

Изменение вектора. Наибольший элемент вектора
Добрый день, нужна оценка кода. Пропустил занятия, делал по теории, опирался на...

Извлечь элемент из массива рандомным индексом
Привет. Есть массив, задача в том, чтобы извлечь из массива элемент рандомным...

Наибольший элемент вектора
Помогите, пожалуйста разобраться с ошибкой. Прога-ма запрашивает числа,...

6
CAHTEXHUK
18.07.2011, 14:28
  #2

Не по теме:

Цитата Сообщение от Zgugu Bamba Посмотреть сообщение
vektor<string>&tk
Цитата Сообщение от Zgugu Bamba Посмотреть сообщение
void
имеет смысл возвращать этот вектор, а не передавать в качестве параметра

0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.07.2011, 14:29 3
Zgugu Bamba, Кто сказал что нельзя? Можно. Если вы правильно разбиваете конечно)

Вообще вот вполне себе адекватный парсер.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
std::vector<std::string> parse(const std::string& string, const std::string& delims = std::string(""))
{
    std::string str = string;
    for (std::string::iterator iter = str.begin(); iter != str.end(); ++iter)
    {
        if (delims.find(*iter) != std::string::npos)
        {
           *iter = ' ';
        }
    }
    std::stringstream ist(str);
    std::vector<std::string> tokens;
    while (ist >> str)
    {
       tokens.push_back(str);
    }
    return tokens;
}
 
int main()
{
    std::vector<std::string> toks = parse(std::string("Hello, world: and. what!"), std::string(" ,.:!"));
    std::copy(toks.begin(), toks.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
2
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
18.07.2011, 14:33 4
ForEveR, блин гениально заменить все разделители на ' '. а я то думал как с помощью СС все разделители учитывать.
C++
1
2
3
4
5
6
7
    for (std::string::iterator iter = str.begin(); iter != str.end(); ++iter)
    {
        if (delims.find(*iter) != std::string::npos)
        {
           *iter = ' ';
        }
    }
может лучше воспользоваться replace_if() ?
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.07.2011, 14:37 5
Правда я предпочитаю не писать лесопедов.

C++
1
2
3
4
5
6
int main()
{
   std::vector<std::string> toks;
   boost::split(toks, std::string("Hello, world: and. what!"), boost::is_any_of(" .,:!"), boost::token_compress_on);
   std::copy(toks.begin(), toks.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
}
Добавлено через 36 секунд
OstapBender, Можно и replace_if. Но тогда предикат придется писать. По-разному можно.
2
Zgugu Bamba
0 / 0 / 0
Регистрация: 18.07.2011
Сообщений: 7
18.07.2011, 16:31  [ТС] 6
Спасибо, ForEveR!
Хорошая подсказка.
0
rangerx
1942 / 1551 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
19.07.2011, 09:45 7
Цитата Сообщение от Zgugu Bamba Посмотреть сообщение
Почему нельзя извлечь какую-то одну лексему из вектора, например, напр. v[4]?
Потому что это не откомпилируется...?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
void Tokenize(const string& str, vector<string>& tk, const string& delimiters = "")
{
    string::size_type lastPos = 0;
    lastPos = str.find_first_not_of(delimiters);
 
    while (lastPos != string::npos)
    {
        string::size_type pos = str.find_first_of(delimiters, lastPos);
        tk.push_back(str.substr(lastPos, pos - lastPos));
        lastPos = str.find_first_not_of(delimiters, pos);
    }
 
}
 
 
int main()
{
    string a("Lorem ipsum dolor sit amet, consectetur adipiscing elit, set eiusmod tempor ");
    vector<string> v;
    Tokenize(a, v, ",.:;!? "); 
 
    for(vector<string>::size_type i = 0; i < v.size(); i++)
        cout << v[i] << '\n';
}
Цитата Сообщение от OstapBender Посмотреть сообщение
а я то думал как с помощью СС все разделители учитывать.
http://www.cyberforum.ru/cpp-beginners/thread205392.html?uri=/cpp-beginners/thread205392.html#post1180838
0
19.07.2011, 09:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2011, 09:45

Изменить элемент вектора
сделал вот такую программку #include &lt;iostream&gt; #include &lt;string&gt; #include...

Указатель на элемент вектора
Добрый день. У меня программа состоит по такому принципу примерно: есть класс...

Как вернуть элемент вектора?
Всем доброго времени суток. Есть небольшая проблема с методом: student...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru