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

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

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

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

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

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

Аналог дотнетовского метода Split на C++ - C++
Есть ли аналог дотнетовского метода Split на C++ или как его можно было бы наиболее просто реализовать? Например нужно строку вида...

Аналог std::string - C++
Имеется некоторый класс, обеспечивающий работу с символами UTF-8. Назовём его uchar. Можно ли простым способом организовать класс ustring,...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri - C++
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

Реализовать аналог класса std::string с помощью vector - C++
Помогите, пожалуйста, с кодом к заданию: Реализовать аналог класса std::string с помощью vector Заранее спасибо!

Операция std::cout для Объекта типа std::string - C++
Кто детально объяснит почему не выводит ? Дает вот так &quot;Отсутствует оператор &quot;&lt;&lt;&quot;, соответствующий этим операндам&quot; void...

запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ - C++
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
29.08.2010, 17:53 #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;
}
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.08.2010, 17:53 #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 намного легче, одной функцией вроде
1
CyBOSSeR
Эксперт C++
2302 / 1672 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.08.2010, 17:56 #4
Цитата Сообщение от Lavroff Посмотреть сообщение
Или с использованием Boost намного легче, одной функцией вроде
Именно, boost::split.
2
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
29.08.2010, 18:09  [ТС] #5
Спасибо всем, буду разбиратся.
Теперь понятно почему нас учить прграмировать с шарпа начали, настолько там некоторые вещи проще.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
29.08.2010, 20:33 #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); 
}
2
Pako Smth
0 / 0 / 0
Регистрация: 19.04.2017
Сообщений: 1
19.04.2017, 19:46 #7
Не профессионально, но просто:
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::vector<string> commands;
std::string line   = "Нью-Йорк Никс USA — Вашингтон Уизардз USA";      //строка, которую нужно разбить
std::string buffer = "";      //буфферная строка
for(int i=0; i < line.size(); i++){
    if(line[i] != '—'){      // "—" сплиттер
          buffer += line[i];     
    }
    else{
          commands.push_back(buffer);
          buffer = "";
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2017, 19:46
Привет! Вот еще темы с ответами:

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами - C++
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Алгоритм std::find_end - аналог std::search_n - C++
Есть два семейства стандартных алгоритмов: std::search и std::find_end. Первое семейство предназначено для поиска первого совпадения...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector - C++
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и почему ошибка выдается???#include...

Передача функции указатель на элемент std::vector<std::string> - C++
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.04.2017, 19:46
Ответ Создать тему
Опции темы

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