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

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

Войти
Регистрация
Восстановить пароль
 
 
useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 542
#1

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

23.07.2015, 12:11. Просмотров 577. Ответов 15
Метки нет (Все метки)

Есть строка вида параметр1*параметр2*параметр3*параметр4.
Как разделить эту строку, чтобы получить в первой переменной параметр1, во второй параметр2, во третьей параметр3, в четвертой параметр4?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2015, 12:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как лучше всего разделить строку на несколько подстрок? (C++):

Разделить исходную строку на несколько строк длины K - C++
Помогите пожалуйста: Разделить исходную строку на несколько строк длины K.

Как лучше всего хранить коэффициенты? - C++
Мне нужно работать с матрицей порядка 100 000. Она сильно разреженная, по этому хранить все коэффициенты - не вижу смысла. Стало быть нужно...

Как лучше всего создать форму в С++ - C++
Хочу попробовать создать не консольную программу, а графическую. Как лучше всего создавать формы?

Как лучше всего учить язык C++? - C++
Хочу начать изучать язык программирования! Остановился на C++, а с чего начать не знаю!

Как лучше всего реализовать настройки в программе? - C++
Хочу грамотно сделать настройки для своей программы. Сейчас примерно так: программа создаёт объект класса Settings, там пользователь...

Как лучше всего разрабатывать GUI проложения? - C++
доброе время суток, ребят вопрос какой вы подход используете в разработки GUIx приложение, сначало пишите консольный вариант а потом...

15
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,535
Завершенные тесты: 1
23.07.2015, 12:16 #2
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
В общем случае используйте регулярные выражения. Они как раз для этого и придуманы.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
23.07.2015, 12:17 #3
Регулярки или strtok.
0
useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 542
23.07.2015, 12:37  [ТС] #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
Спасибо что напомнили.) Не хотел вас "грузить."
Мой вопрос достаточно распостраненный и ответов на него в инете полно. И на форуме, разумеется, искал.
Но мне нужен не любой способ, а универсальный. Или лучший. Т.е. такой способ, который будет работать и в С, и в С++ и в Qt.
Qt это фреймворк (ну вы и без меня знаете). А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
Собственно вот. Не всякая функция/способ подойдёт. Нужен лучший, универсальный способ.

А так как я в С++ новичек, то и спрашиваю вас. Можно, конечно методом научного тыка...но с Qt поверьте -это будет долго.
0
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 867
Регистрация: 27.09.2012
Сообщений: 18,896
Записей в блоге: 3
Завершенные тесты: 1
23.07.2015, 12:43 #5
Цитата Сообщение от useruser Посмотреть сообщение
будет работать и в С, и в С++
тогда сразу все C++ библиотеки отсекаем.
Цитата Сообщение от useruser Посмотреть сообщение
А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
тогда только strtok или сторонние кроссплатформенные решения.
Цитата Сообщение от useruser Посмотреть сообщение
Нужен лучший, универсальный способ.
лучшего еще не придумали.
0
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());
}
0
useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 542
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 вообще проблем нету
Спорное утверждение. Ну не будем.
0
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 867
Регистрация: 27.09.2012
Сообщений: 18,896
Записей в блоге: 3
Завершенные тесты: 1
23.07.2015, 13:29 #8
Цитата Сообщение от useruser Посмотреть сообщение
Ок. В результате код будет такой.
Ну и как, работает?
Цитата Сообщение от useruser Посмотреть сообщение
Как то мудрено для такой простой задачи.
Угу, пока не станете работать с другими типами символов (wchar_t, char16_t, char32_t ...)
0
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);
ваша задача решены.

Опять сложно? отложите программирование откройте книгу.
0
Croessmah
Эксперт CЭксперт С++
13514 / 7673 / 867
Регистрация: 27.09.2012
Сообщений: 18,896
Записей в блоге: 3
Завершенные тесты: 1
23.07.2015, 13:35 #10
Цитата Сообщение от Pancir Посмотреть сообщение
ваша задача решены.
не совсем, ведь
Цитата Сообщение от useruser Посмотреть сообщение
Т.е. такой способ, который будет работать и в С, и в С++
0
Pancir
57 / 44 / 10
Регистрация: 16.09.2014
Сообщений: 124
23.07.2015, 13:38 #11
Croessmah
Я подозреваю, что это условия вытекло от непонимания и не знания, реального use case на это условия скорее всего нет, но это мои догадки которые конечно могут быть не верны.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,535
Завершенные тесты: 1
23.07.2015, 13:50 #12
У меня сложилось впечатление, что тс хочет просто достать char из QString.
0
useruser
58 / 58 / 15
Регистрация: 29.06.2015
Сообщений: 542
23.07.2015, 14:14  [ТС] #13
Всем спасибо за ответы. И так сойдёт.(с).
В решении Pancir я не уверен, но пока не попробуешь не узнаешь.
Будем смотреть и искать...
0
Avazart
23.07.2015, 14:34
  #14

Не по теме:

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

0
Croessmah
23.07.2015, 14:36     Как лучше всего разделить строку на несколько подстрок?
  #15

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2015, 14:36
Привет! Вот еще темы с ответами:

Как лучше всего пробежать все элементы контейнера? - C++
Речь о следующем. Есть vector. Я хочу пробежать все его элементы, но походу я буду проверять удовлетворяют они определенному условию или...

Как же все-таки лучше всего перегружать операторы? - C++
1. Нужно ли использовать friend там, где это возможно? (или не стоит злоупотреблять где-нибудь?) 2. Стоит ли при перегрузке бинарного...

Подскажите, как разделить код на несколько файлов - C++
• Имеем основной cpp файл с main. • Имеем код нужных функций • Есть указание реализовать эти функции не в основном cpp, а в нескольких....

Нужен совет: как лучше всего сгенерировать документ .doc с оформлением по ГОСТу - C++
Хай. Надо написать программу которая будет оформлять текст так сказать по госту(шрифт, размер интервал), была возможность вставлять туда...


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

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

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