Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
#1

Разделить строку по пробелам и записать полученные части в массив - C++

31.03.2013, 16:29. Просмотров 2689. Ответов 12
Метки нет (Все метки)

Здравствуйте. Подскажите, есть ли способ разделить строку по пробелам и записать полученные части в массив (по сути, аналог Split() в c#)?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2013, 16:29     Разделить строку по пробелам и записать полученные части в массив
Посмотрите здесь:
Разделить строку по пробелам (без потоков) C++
Разделить строку AnsiString на слова и записать их в массив! C++
Разделить строку на части C++
Разделить строку на две части C++
Разделить строку на две части C++
Разделить строку на части по указанному символу C++
Нужно разделить эту строку на 3 части и вывести на экран. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
31.03.2013, 16:37     Разделить строку по пробелам и записать полученные части в массив #2
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
31
32
33
34
35
36
37
38
39
#include <string>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
 
std::vector<std::string> split(const std::string& s, const char * delim)
{
    std::string::size_type size = s.length();
    char * const buffer = new char[size + 1];
    std::vector<std::string> res;
    
    strcpy(buffer, s.c_str());
    
    char * p = strtok(buffer, delim);
    while (p)
    {
        res.push_back(std::string(p));
        p = strtok(NULL, delim);
    }
    delete[]buffer;
    
    return res;
}
 
int main()
{
    std::string s("vf b fgb gf b f b");
    
    std::cout << "Source string: " << std::endl << s << std::endl;
    
    std::vector<std::string> r = split(s, " ");
    
    std::cout << "Splitted terms: " << std::endl;
    for (std::vector<std::string>::const_iterator i = r.begin(), end = r.end(); i != end; ++i)
        std::cout << *i << std::endl;
    
    return EXIT_SUCCESS;
}
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
31.03.2013, 16:39     Разделить строку по пробелам и записать полученные части в массив #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
 
int main() 
{
    setlocale (0, "Russian");
    
    std::vector<std::string> words;
    std::string str = "Подскажите, есть ли способ разделить строку по пробелам";
    boost::split(words, str, boost::algorithm::is_space(), boost::token_compress_on);
    for (auto& i : words) std::cout<<i<<"\n";
    
    return 0;
}
VladislavTepes
78 / 78 / 5
Регистрация: 27.06.2012
Сообщений: 555
Записей в блоге: 1
31.03.2013, 16:40  [ТС]     Разделить строку по пробелам и записать полученные части в массив #4
sandye51, хорошо, но как мне теперь получить какую-либо часть оттуда?

Добавлено через 43 секунды
yuron_477, я так понимаю, с использованием boost? Ее еще подключить надо?
sandye51
программист С++
681 / 583 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
31.03.2013, 16:42     Разделить строку по пробелам и записать полученные части в массив #5
anonymous2797, почитайте что такое std::vector и такие вопросы отпадут
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.03.2013, 16:52     Разделить строку по пробелам и записать полученные части в массив #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
std::vector<std::string> split(const std::string &string,
                               const std::string &delims)
{
   std::vector<std::string> result;
   size_t current_idx = 0;
   while (current_idx != std::string::npos) {
      size_t from = string.find_first_not_of(delims, current_idx);
      size_t to   = string.find_first_of(delims, from);
      size_t len  = std::string::npos;
      if (to != std::string::npos) {
         len = to - from;
      }
      result.push_back(string.substr(from, len));
      current_idx = to;
   }
   return result;
}
Для бедных. (Лажает на пустой строке, да.)
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
31.03.2013, 17:03     Разделить строку по пробелам и записать полученные части в массив #7
Еще так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
 
int main() 
{
    setlocale (0, "Russian");
    
    std::string str = "Подскажите, есть ли способ    разделить    строку по пробелам";
    std::istringstream iss(str);
    std::vector<std::string> words {std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>()};
    for (auto& i : words) std::cout<<i<<"\n";
 
    return 0;
}
IrineK
Заблокирован
31.03.2013, 17:04     Разделить строку по пробелам и записать полученные части в массив #8
Используем потоки
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
#include <iostream>
#include <sstream>
using namespace std;
 
int main()
{   string s, cur;
    int i= 0, num = 0;
    cout<<"Your string:\n";
    getline(cin, s);
    istringstream ist(s);
    
    while(ist>>cur) //находим кво слов
        num++;
    string *word = new string[num];//создаем массив
    
    ist.clear();
    ist.seekg (0, ist.beg);
    while(ist>>cur)     //записываем
        word[i++] = cur;
 
    //проверяем
    cout<<"Your words:\n";
    for(int i=0;i<num;i++)
        cout<<'\t'<<word[i]<<'\n';
 
    delete [] word;
    cin.sync(); cin.get();
    return 0;
}
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,909
31.03.2013, 19:22     Разделить строку по пробелам и записать полученные части в массив #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
std::vector<std::string> split(const std::string& src, const std::string& delim)
{
    std::vector<std::string> dest;
    std::string::size_type i = src.find_first_not_of(delim);
    while(i != std::string::npos)
    {
        const std::string::size_type j = src.find_first_of(delim, i);
        if(j == std::string::npos)
        {
            dest.push_back(src.substr(i));
            return dest;
        }
 
        const std::string::size_type n = j - i;
        dest.push_back(src.substr(i, n));
        i = src.find_first_not_of(delim, i + n);
    }
 
    return dest;
}
zarko97
251 / 32 / 0
Регистрация: 11.10.2015
Сообщений: 243
22.04.2017, 12:18     Разделить строку по пробелам и записать полученные части в массив #10
C++
1
2
3
4
5
6
7
8
9
10
11
    const std::string some = "asd asd asd f g3 fg 4gf sv df dfieiurnd sdueejff idfhfd dfnfd f";
    
    for (boost::algorithm::split_iterator<std::string::const_iterator> it 
        = boost::algorithm::make_split_iterator(some, boost::algorithm::token_finder(
                                                boost::algorithm::is_space, 
                                                boost::algorithm::token_compress_on));
        it != boost::algorithm::split_iterator<std::string::const_iterator>(); 
        ++it)
    {
             std::cout << *it << std::endl;
    }
GbaLog-
Любитель чаепитий
2593 / 1132 / 281
Регистрация: 24.08.2014
Сообщений: 4,140
Записей в блоге: 1
Завершенные тесты: 2
22.04.2017, 12:26     Разделить строку по пробелам и записать полученные части в массив #11
zarko97, чем тебя boost::split не устроил?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//g++  5.4.0
 
#include <iostream>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
 
int main()
{
    const std::string some = "asd asd asd f g3 fg 4gf sv df dfieiurnd sdueejff idfhfd dfnfd f";
    
    std::vector<std::string> v;
    
    boost::split(v, some, boost::algorithm::is_space(), boost::algorithm::token_compress_on);
    
    for (const auto & it : v)
        std::cout << it << "\n";
}
zarko97
251 / 32 / 0
Регистрация: 11.10.2015
Сообщений: 243
22.04.2017, 14:34     Разделить строку по пробелам и записать полученные части в массив #12
GbaLog-, просто один из вариантов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2017, 11:27     Разделить строку по пробелам и записать полученные части в массив
Еще ссылки по теме:
Разделить массив на 4 части C++
C++ Разделить массив на две части
Разделить массив на две части C++
C++ Разделить строку на буквы и цифры и записать в два стека
разделить числа, и записать их как массив C++

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

Или воспользуйтесь поиском по форуму:
zarko97
251 / 32 / 0
Регистрация: 11.10.2015
Сообщений: 243
07.05.2017, 11:27     Разделить строку по пробелам и записать полученные части в массив #13
так еще

C++
1
2
3
4
5
std::locale().global(std::locale("rus"));
std::string str;
while (std::cout << "String: " && std::getline(std::cin, str) && str.empty());
std::vector<std::string> tokens;
for (std::string s; std::getline(std::stringstream(str), s, ' '); tokens.emplace_back(std::string(s)));
Yandex
Объявления
07.05.2017, 11:27     Разделить строку по пробелам и записать полученные части в массив
Ответ Создать тему
Опции темы

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