165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
1

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

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

Author24 — интернет-сервис помощи студентам
Есть строка вида параметр1*параметр2*параметр3*параметр4.
Как разделить эту строку, чтобы получить в первой переменной параметр1, во второй параметр2, во третьей параметр3, в четвертой параметр4?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2015, 12:11
Ответы с готовыми решениями:

Разделить строку, взятую из файла, на несколько подстрок и сделать каждую значением соответствующей переменной
Добрый день Уважаемые форумчане. Может кто поможет студенту Необходимо реализовать на VBS такую...

Что лучше всего читать/смотреть где лучше всего практиковаться и как в принципе лучше всего учиться программированию
Здравствуйте,извините за вопрос не по теме но: уже около пол года изучаю С языки и начал понимать...

Как лучше разделить файл на несколько частей?
Добрый день. Появилась такая задачка. Есть к примеру 3 файла и у всех разный размер. Как можно...

Вывести строку,содержащую заключенную в скобки подстроку или несколько подстрок
Народ помогите пожалуйста с задачкой нужно: Вывести строку,содержащую заключенную в скобки...

15
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
23.07.2015, 12:16 2
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
В общем случае используйте регулярные выражения. Они как раз для этого и придуманы.
0
Эксперт по математике/физикеЭксперт С++
2044 / 1363 / 393
Регистрация: 16.05.2013
Сообщений: 3,500
Записей в блоге: 6
23.07.2015, 12:17 3
Регулярки или strtok.
0
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
23.07.2015, 12:37  [ТС] 4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
Спасибо что напомнили.) Не хотел вас "грузить."
Мой вопрос достаточно распостраненный и ответов на него в инете полно. И на форуме, разумеется, искал.
Но мне нужен не любой способ, а универсальный. Или лучший. Т.е. такой способ, который будет работать и в С, и в С++ и в Qt.
Qt это фреймворк (ну вы и без меня знаете). А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
Собственно вот. Не всякая функция/способ подойдёт. Нужен лучший, универсальный способ.

А так как я в С++ новичек, то и спрашиваю вас. Можно, конечно методом научного тыка...но с Qt поверьте -это будет долго.
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
23.07.2015, 12:43 5
Цитата Сообщение от useruser Посмотреть сообщение
будет работать и в С, и в С++
тогда сразу все C++ библиотеки отсекаем.
Цитата Сообщение от useruser Посмотреть сообщение
А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
тогда только strtok или сторонние кроссплатформенные решения.
Цитата Сообщение от useruser Посмотреть сообщение
Нужен лучший, универсальный способ.
лучшего еще не придумали.
0
59 / 46 / 11
Регистрация: 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
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
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_stri ng),"*");

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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
23.07.2015, 13:29 8
Цитата Сообщение от useruser Посмотреть сообщение
Ок. В результате код будет такой.
Ну и как, работает?
Цитата Сообщение от useruser Посмотреть сообщение
Как то мудрено для такой простой задачи.
Угу, пока не станете работать с другими типами символов (wchar_t, char16_t, char32_t ...)
0
59 / 46 / 11
Регистрация: 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
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
23.07.2015, 13:35 10
Цитата Сообщение от Pancir Посмотреть сообщение
ваша задача решены.
не совсем, ведь
Цитата Сообщение от useruser Посмотреть сообщение
Т.е. такой способ, который будет работать и в С, и в С++
0
59 / 46 / 11
Регистрация: 16.09.2014
Сообщений: 124
23.07.2015, 13:38 11
Croessmah
Я подозреваю, что это условия вытекло от непонимания и не знания, реального use case на это условия скорее всего нет, но это мои догадки которые конечно могут быть не верны.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
23.07.2015, 13:50 12
У меня сложилось впечатление, что тс хочет просто достать char из QString.
0
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,098
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:D

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

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.07.2015, 15:13

Где и как лучше всего хранить строку, которая будет подвергаться значительным изменениям
Добрый вечер. Пишу программу, которая использует строку и предполагает большое кол-во внесенных и...

Разделить одну строку на несколько
Всем привет подскажите как разделить и вписать в базу одну строку такого типа (Автошина 155/70 R13...

Разделить строку на несколько частей
Функция создания таблицы: void tableCreate(String ab, String bb,String gg) { ScrollView sv =...

Разделить одну строку на несколько
Доброго времени суток. Помогите пожалуйста с такой задачкой: необходимо разбить одну длинную строку...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru