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

Как лучше всего разделить строку на несколько подстрок? - C++

Восстановить пароль Регистрация
 
useruser
 Аватар для useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 504
23.07.2015, 12:11     Как лучше всего разделить строку на несколько подстрок? #1
Есть строка вида параметр1*параметр2*параметр3*параметр4.
Как разделить эту строку, чтобы получить в первой переменной параметр1, во второй параметр2, во третьей параметр3, в четвертой параметр4?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2015, 12:11     Как лучше всего разделить строку на несколько подстрок?
Посмотрите здесь:

Как лучше всего хранить коэффициенты? C++
C++ Как лучше всего учить язык C++?
C++ Как же все-таки лучше всего перегружать операторы?
Как разделить строку на слова? C++
Разделить исходную строку на несколько строк длины K C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
23.07.2015, 12:16     Как лучше всего разделить строку на несколько подстрок? #2
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
В общем случае используйте регулярные выражения. Они как раз для этого и придуманы.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
23.07.2015, 12:17     Как лучше всего разделить строку на несколько подстрок? #3
Регулярки или strtok.
useruser
 Аватар для useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 504
23.07.2015, 12:37  [ТС]     Как лучше всего разделить строку на несколько подстрок? #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
Спасибо что напомнили.) Не хотел вас "грузить."
Мой вопрос достаточно распостраненный и ответов на него в инете полно. И на форуме, разумеется, искал.
Но мне нужен не любой способ, а универсальный. Или лучший. Т.е. такой способ, который будет работать и в С, и в С++ и в Qt.
Qt это фреймворк (ну вы и без меня знаете). А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
Собственно вот. Не всякая функция/способ подойдёт. Нужен лучший, универсальный способ.

А так как я в С++ новичек, то и спрашиваю вас. Можно, конечно методом научного тыка...но с Qt поверьте -это будет долго.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
23.07.2015, 12:43     Как лучше всего разделить строку на несколько подстрок? #5
Цитата Сообщение от useruser Посмотреть сообщение
будет работать и в С, и в С++
тогда сразу все C++ библиотеки отсекаем.
Цитата Сообщение от useruser Посмотреть сообщение
А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
тогда только strtok или сторонние кроссплатформенные решения.
Цитата Сообщение от useruser Посмотреть сообщение
Нужен лучший, универсальный способ.
лучшего еще не придумали.
Pancir
 Аватар для Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
23.07.2015, 13:14     Как лучше всего разделить строку на несколько подстрок? #6
Цитата Сообщение от useruser Посмотреть сообщение
А так как я в С++ новичек, то и спрашиваю вас. Можно, конечно методом научного тыка...но с Qt поверьте -это будет долго.
Ищите волшебную таблетку? так не получится придется все равно изучать.
С QT вообще проблем нету, метод QString::split

простой аналог для STL std::string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    
/*!
\details Splits the string by specified symbols
\param [in] inStr string for splitting
\param [in] inSymbols the symbols which will be used as separator.
\param [out] outList array for storing the result.
*/
template<class Type, class Container>
inline void split(const std::basic_string<Type> &inStr, const std::basic_string<Type> &inSymbols, Container &outList) {
        std::size_t found = inStr.find_first_of(inSymbols);
        std::size_t lastFound = 0;
 
        while (found != std::basic_string<Type>::npos) {
            if (lastFound != found)
                outList.push_back(inStr.substr(lastFound, found - lastFound).data());
            found = inStr.find_first_of(inSymbols, lastFound = found + 1);
        }
 
        if (lastFound != inStr.size())
            outList.push_back(inStr.substr(lastFound, inStr.size() - lastFound).data());
}
useruser
 Аватар для useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 504
23.07.2015, 13:16  [ТС]     Как лучше всего разделить строку на несколько подстрок? #7
Ок. В результате код будет такой.
C++ (Qt)
1
2
QString current_string=out.readAll();
current_string=strtok(current_string,"*");
А как теперь преобразовать current_string (QString) в char? И обратно в QString? Ввод и вывод должен быть в QString.

Образно выражаясь
Преобразовать_в_QString(current_string)=strtok(Преобразовать_в_char(current_string),"*");

C++ (Qt)
1
current_string.c_str();
Не работает. class QString has no member named 'c_str'.

Цитата Сообщение от Pancir Посмотреть сообщение
Ищите волшебную таблетку? так не получится придется все равно изучать.
Так это - ежики плакали но всё равно продолжали грызть кактус.

Цитата Сообщение от Pancir Посмотреть сообщение
template<class Type, class Container>
Что то это мне не нравится. Как то мудрено для такой простой задачи.

Цитата Сообщение от Pancir Посмотреть сообщение
С QT вообще проблем нету
Спорное утверждение. Ну не будем.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
23.07.2015, 13:29     Как лучше всего разделить строку на несколько подстрок? #8
Цитата Сообщение от useruser Посмотреть сообщение
Ок. В результате код будет такой.
Ну и как, работает?
Цитата Сообщение от useruser Посмотреть сообщение
Как то мудрено для такой простой задачи.
Угу, пока не станете работать с другими типами символов (wchar_t, char16_t, char32_t ...)
Pancir
 Аватар для Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
23.07.2015, 13:32     Как лучше всего разделить строку на несколько подстрок? #9
Цитата Сообщение от useruser Посмотреть сообщение
Спорное утверждение. Ну не будем.
C++
1
QStringList myValues = myQString.split("*");
ваша задача решены.
Цитата Сообщение от useruser Посмотреть сообщение
Что то это мне не нравится. Как то мудрено для такой простой задачи.
C++
1
2
std::list<std::string> result;
split(myString, "*", result);
ваша задача решены.

Опять сложно? отложите программирование откройте книгу.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
23.07.2015, 13:35     Как лучше всего разделить строку на несколько подстрок? #10
Цитата Сообщение от Pancir Посмотреть сообщение
ваша задача решены.
не совсем, ведь
Цитата Сообщение от useruser Посмотреть сообщение
Т.е. такой способ, который будет работать и в С, и в С++
Pancir
 Аватар для Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
23.07.2015, 13:38     Как лучше всего разделить строку на несколько подстрок? #11
Croessmah
Я подозреваю, что это условия вытекло от непонимания и не знания, реального use case на это условия скорее всего нет, но это мои догадки которые конечно могут быть не верны.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
23.07.2015, 13:50     Как лучше всего разделить строку на несколько подстрок? #12
У меня сложилось впечатление, что тс хочет просто достать char из QString.
useruser
 Аватар для useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 504
23.07.2015, 14:14  [ТС]     Как лучше всего разделить строку на несколько подстрок? #13
Всем спасибо за ответы. И так сойдёт.(с).
В решении Pancir я не уверен, но пока не попробуешь не узнаешь.
Будем смотреть и искать...
Avazart
23.07.2015, 14:34
  #14

Не по теме:

Цитата Сообщение от Pancir Посмотреть сообщение
Ищите волшебную таблетку?
Ага таблетку цианида )))

Croessmah
23.07.2015, 14:36
  #15

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Ага таблетку цианида
злой и страшный Avazart

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2015, 15:13     Как лучше всего разделить строку на несколько подстрок?
Еще ссылки по теме:

Как лучше всего создать форму в С++ C++
C++ Нужен совет: как лучше всего сгенерировать документ .doc с оформлением по ГОСТу
Как разделить строку на слова? C++

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

Или воспользуйтесь поиском по форуму:
Avazart
23.07.2015, 15:13     Как лучше всего разделить строку на несколько подстрок?
  #16

Не по теме:

Лишь бы не серый

Yandex
Объявления
23.07.2015, 15:13     Как лучше всего разделить строку на несколько подстрок?
Ответ Создать тему
Опции темы

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