Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
useruser
80 / 76 / 34
Регистрация: 29.06.2015
Сообщений: 781
1

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

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

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

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

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

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

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

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

15
SatanaXIII
Почетный модератор
Эксперт С++
5795 / 2790 / 385
Регистрация: 01.11.2011
Сообщений: 6,792
Завершенные тесты: 1
23.07.2015, 12:16 2
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
В общем случае используйте регулярные выражения. Они как раз для этого и придуманы.
0
Ilot
Эксперт С++
1834 / 1192 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
23.07.2015, 12:17 3
Регулярки или strtok.
0
useruser
80 / 76 / 34
Регистрация: 29.06.2015
Сообщений: 781
23.07.2015, 12:37  [ТС] 4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Остается узнать, что вы вкладываете в слово лучше. Быстрее, выше, сильнее?
Спасибо что напомнили.) Не хотел вас "грузить."
Мой вопрос достаточно распостраненный и ответов на него в инете полно. И на форуме, разумеется, искал.
Но мне нужен не любой способ, а универсальный. Или лучший. Т.е. такой способ, который будет работать и в С, и в С++ и в Qt.
Qt это фреймворк (ну вы и без меня знаете). А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
Собственно вот. Не всякая функция/способ подойдёт. Нужен лучший, универсальный способ.

А так как я в С++ новичек, то и спрашиваю вас. Можно, конечно методом научного тыка...но с Qt поверьте -это будет долго.
0
Croessmah
++Ͻ
15245 / 8635 / 1642
Регистрация: 27.09.2012
Сообщений: 21,273
Записей в блоге: 2
Завершенные тесты: 1
23.07.2015, 12:43 5
Цитата Сообщение от useruser Посмотреть сообщение
будет работать и в С, и в С++
тогда сразу все C++ библиотеки отсекаем.
Цитата Сообщение от useruser Посмотреть сообщение
А собирать проект я буду под винду и линукс, а там разные компиляторы и т.д.
тогда только strtok или сторонние кроссплатформенные решения.
Цитата Сообщение от useruser Посмотреть сообщение
Нужен лучший, универсальный способ.
лучшего еще не придумали.
0
Pancir
57 / 44 / 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
useruser
80 / 76 / 34
Регистрация: 29.06.2015
Сообщений: 781
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
++Ͻ
15245 / 8635 / 1642
Регистрация: 27.09.2012
Сообщений: 21,273
Записей в блоге: 2
Завершенные тесты: 1
23.07.2015, 13:29 8
Цитата Сообщение от useruser Посмотреть сообщение
Ок. В результате код будет такой.
Ну и как, работает?
Цитата Сообщение от useruser Посмотреть сообщение
Как то мудрено для такой простой задачи.
Угу, пока не станете работать с другими типами символов (wchar_t, char16_t, char32_t ...)
0
Pancir
57 / 44 / 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
Croessmah
++Ͻ
15245 / 8635 / 1642
Регистрация: 27.09.2012
Сообщений: 21,273
Записей в блоге: 2
Завершенные тесты: 1
23.07.2015, 13:35 10
Цитата Сообщение от Pancir Посмотреть сообщение
ваша задача решены.
не совсем, ведь
Цитата Сообщение от useruser Посмотреть сообщение
Т.е. такой способ, который будет работать и в С, и в С++
0
Pancir
57 / 44 / 11
Регистрация: 16.09.2014
Сообщений: 124
23.07.2015, 13:38 11
Croessmah
Я подозреваю, что это условия вытекло от непонимания и не знания, реального use case на это условия скорее всего нет, но это мои догадки которые конечно могут быть не верны.
0
SatanaXIII
Почетный модератор
Эксперт С++
5795 / 2790 / 385
Регистрация: 01.11.2011
Сообщений: 6,792
Завершенные тесты: 1
23.07.2015, 13:50 12
У меня сложилось впечатление, что тс хочет просто достать char из QString.
0
useruser
80 / 76 / 34
Регистрация: 29.06.2015
Сообщений: 781
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
23.07.2015, 15:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2015, 15:13
Привет! Вот еще темы с ответами:

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

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

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


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

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

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