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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 177, средняя оценка - 4.72
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
#1

Аналог метода Split для std::string - C++

29.08.2010, 17:50. Просмотров 23041. Ответов 5
Метки нет (Все метки)

Как можно раздилить string?
вот например строчка из сишарп
C#
1
2
    string s = "class Klass";
    string[] sarr = s.Split(' ');
есть нечто подобное в с++ ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2010, 17:50     Аналог метода Split для std::string
Посмотрите здесь:

C++ Аналог дотнетовского метода Split на C++
Алгоритм std::find_end - аналог std::search_n C++
C++ запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’
Передача функции указатель на элемент std::vector<std::string> C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
C++ Как правильно перевести std::wstring в std::string ?
Аналог std::string C++
C++ Реализовать аналог класса std::string с помощью vector
Операция std::cout для Объекта типа std::string C++
Open Watcom нет перегрузки для оператора ввода для типа std::string C++
Std::vector для Array of String C++
C++ Почему std::string_view МЕДЛЕННЕЕ, чем std::string?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
29.08.2010, 17:53     Аналог метода Split для std::string #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
inline bool space(char c){
    return std::isspace(c);
}
 
inline bool notspace(char c){
    return !std::isspace(c);
}
 
//break a sentence into words
std::vector<std::string> split(const std::string& s){
    typedef std::string::const_iterator iter;
    std::vector<std::string> ret;
    iter i = s.begin();
    while(i!=s.end()){
        i = std::find_if(i, s.end(), notspace); // find the beginning of a word
        iter j= std::find_if(i, s.end(), space); // find the end of the same word
        if(i!=s.end()){
            ret.push_back(std::string(i, j)); //insert the word into vector
            i = j; // repeat 1,2,3 on the rest of the line.
        }
    }
    return ret;
}
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
29.08.2010, 17:53     Аналог метода Split для std::string #3
bobromet,
C++
1
2
3
4
5
6
std::string S="class Klass";
std::vector<std::string> VecStr;
std::istringstream ss(s);
std::string String;
while(ss>>String)
   VecStr.push_back(String);
Или с использованием Boost намного легче, одной функцией вроде
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2297 / 1667 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.08.2010, 17:56     Аналог метода Split для std::string #4
Цитата Сообщение от Lavroff Посмотреть сообщение
Или с использованием Boost намного легче, одной функцией вроде
Именно, boost::split.
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 18:09  [ТС]     Аналог метода Split для std::string #5
Спасибо всем, буду разбиратся.
Теперь понятно почему нас учить прграмировать с шарпа начали, настолько там некоторые вещи проще.
rangerx
1921 / 1530 / 139
Регистрация: 31.05.2009
Сообщений: 2,892
29.08.2010, 20:33     Аналог метода Split для std::string #6
Как говорится, для разнообразия(способ естественно не из лучших)
C++
1
2
3
4
5
6
7
8
9
10
11
12
void split(std::vector<std::string>& dest, const std::string& str, const char* delim)
{
    char* pTempStr = strdup( str.c_str() );      
    char* pWord = strtok(pTempStr, delim);       
    while(pWord != NULL)
    {
        dest.push_back(pWord);
        pWord = strtok(NULL, delim);        
    }
    
    free(pTempStr); 
}
Yandex
Объявления
29.08.2010, 20:33     Аналог метода Split для std::string
Ответ Создать тему
Опции темы

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