Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, помогите пожалуйста разобраться с проблемой. Я распарсил строку "col_1,col_2,col_3,col_1;". (мне нужно получить массив целых чисел 1, 2, 3, 1). Вот код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Но после третей итерации возникает ошибка (error.jpg). Возникает только после третей итерации, т.е. если строка "col_1,col_2,col_3" состоит из трех col_n, то работает, но если col_n больше чем три, то "An unhandled exception of type 'System.AccessViolationException' occurred in ReportSelector.exe Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt." Отлаживал по шагам (Step over), ошибка возникает на четвертой итерации при заходе в функцию std::regex_search(first, last, mr, rx). Кто-нибудь знает как решить эту проблему ? Может кто подскажет другие способы распарсить строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 10:08 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Под отладчиком запускал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 10:14 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
m_Sla, Запускал в Visual Studio 2015 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 10:17 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
думаю потому что используются низкоуровневые фукнции. http://en.cppreference.com/w/cpp/regex/regex_search тут есть подобный пример, только реализован по нормальному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2016, 17:12 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
alexy_black http://en.cppreference.com/w/cpp/regex/regex_iterator Спасибо, статья помогла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2016, 15:52 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Применять регулярки.... найти подстроку... а потом взять .substr(4) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2016, 16:07 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
maytonПрименять регулярки.... найти подстроку... а потом взять .substr(4) ... Всё правильно, substr быстрее. И нагляднее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2016, 06:05 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
CEMbmaytonПрименять регулярки.... найти подстроку... а потом взять .substr(4) ... Всё правильно, substr быстрее. И нагляднее :) Насколько быстрее? И всегда ли? Serega325 Здравствуйте, помогите пожалуйста разобраться с проблемой. Я распарсил строку "col_1,col_2,col_3,col_1;". (мне нужно получить массив целых чисел 1, 2, 3, 1). Вот код: Если целые числа содержат одну цифру, то это одна задача, при этом совершенно тривиальная. Пройдите по символьной строке, и проверьте каждый символ на соответствие его определенному диапазону. Если целые числа состоят из нескольких цифр, то алгоритм будет несколько другой, но я уверен, что его вполне возможно реализовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2016, 15:54 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Чувак из гаубицы стрельнул по воробышкам. Потом подошел к дохлым птичкам и еще из рогатки добил.... для надежности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2016, 16:02 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
mayton, почему? иногда быстрее написать регулярку, чем написать алгоритм какой-то, который бы разобрал такую строку. а что если она потом поменяется? с регуляркой нужно будет просто изменить регулярку, а вот с алгоритмом будет труднее. эсперемент я не проводил, но по-моему я напишу такой разбор с регуляркой с первого раза, а вот алгоритм придется отладить.. по мне - так это довод, чтобы юзать регулярку. если конечно мне не нужно разбирать эту строку раз 50 за секунду :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 10:46 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
alexy_black, понимешь тут надо быть либо "беременной" либо "не-беременной". Вариант смешивания технологий позразумевает что ты либо не до конца осилил работу с регулярками либо решил что подключил гаубицу но тебе не хватило перформанса. Но в данном юзкейсе у нас стоит на первом шаге работа регулярок а потом работа суб-строк и я делаю вывод что автор не делал перформанс-тюнинг. Я-бы эту задачу решал либо boost::split -ом либо c регулярками но используя правило которое отбрасывает работу std::regex_search на самый последний шаг когда уже 100% известно что выражение нам подходит и механизм регулярок точно необходим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2016, 11:50 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
mayton Я-бы эту задачу решал либо boost: Ты тоже по воробьям знатно из гаубицы пальнул. Вот правильная рогатка с БК :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 10:34 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Ну спасибо док. Так еще до дубинки дойдем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 10:52 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Мне strtok не нравится тем что она не совсем.... хм.... pure function. При прочих равных условиях я-бы предпочел его не использовать вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 11:41 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
maytonМне strtok не нравится тем что она не совсем.... хм.... pure function. При прочих равных условиях я-бы предпочел его не использовать вообще. Вот тебе самая, что ненаесть православная, идеологичски скрепная рогатка pure function подсказка [ Matches a nonempty sequence of characters from the specified set of accepted characters; the next pointer must be a pointer to char, and there must be enough room for all the characters in the string, plus a terminating null byte. The usual skip of leading white space is suppressed. The string is to be made up of characters in (or not in) a particular set; the set is defined by the characters between the open bracket [ character and a close bracket ] character. The set excludes those charac‐ ters if the first character after the open bracket is a circum‐ flex (^). To include a close bracket in the set, make it the first character after the open bracket or the circumflex; any other position will end the set. The hyphen character - is also special; when placed between two other characters, it adds all intervening characters to the set. To include a hyphen, make it the last character before the final close bracket. For instance, [^]0-9-] means the set "everything except close bracket, zero through nine, and hyphen". The string ends with the appearance of a character not in the (or, with a circumflex, in) set or when the field width runs out. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 12:32 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
maytonМне strtok не нравится тем что она не совсем.... хм.... pure function. При прочих равных условиях я-бы предпочел его не использовать вообще . Вообще, ты не умеешь их готовить . что бы результат нравился , во время приготовления рекурсивно мыслить нужно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 12:38 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
д0k, спасибо док. Вместо гаубицы ты мне подкатил самую эксклюзивную и тяжелую пушку всех времен и народов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 12:41 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
maytonд0k, спасибо док. Вместо гаубицы ты мне подкатил самую эксклюзивную и тяжелую пушку всех времен и народов. ты не шаришь, это не гаубица и не пушка, это индивидуальный универсальный переносной швейцарский нож - гранатомет , который всегда в кармане ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 12:48 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
maytonМне strtok не нравится тем что она не совсем.... хм.... pure function. При прочих равных условиях я-бы предпочел его не использовать вообще. Почему? Почему? Btw, с ней надо аккуратно работать, да. Например, strtok в/между strtok не звать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 14:26 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
CEMb, на чистых можно строить ФП и потокобезопасный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 14:44 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Serega325 Код: plaintext 1. У вас ошибка. Нужно массив так инициалиировать: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 15:15 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 15:54 |
|
||
|
Парсинг строки с++
|
|||
|---|---|---|---|
|
#18+
tehKosh, я-бы здесь использовал while. Код: plaintext 1. 2. 3. 4. 5. 6. так дебаггером степать удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2016, 18:32 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39272620&tid=2018476]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
68ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 282ms |
| total: | 461ms |

| 0 / 0 |
