|
Разбить строку
|
|||
---|---|---|---|
#18+
Нужно поделить строку по пробелам но не до конца. допустим строка "ааа ббб ввв ггг" нужно получить "ааа" "ббб" "ввв ггг" то есть третяя строка без разделения. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
если if(argc == 2) результат args[0] = "ааа" args[1] = "ббб" args[2] = "ввв " - ггг обрезается если if(argc == 1) результат args[0] = "ааа" args[1] = "ббб" args[2] = мусор как мне сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 16:01 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Так попробуй Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Не запускал. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 16:11 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Dima T Так попробуй Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Не запускал. получается то же самое args[0] = "ааа" args[1] = "ббб" args[2] = "ввв " - ггг обрезается может свою ф-цию написать? strtok мне никогда не нравился :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 16:29 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Попробуй так: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 17:26 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Агрох Попробуй так: Код: plaintext 1. 2. 3. 4.
после strtok (NULL, "") указатель теряется - пишет unavailable. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 17:35 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
бьёшь на 4 и склеиваешь 2 последние ... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2020, 18:54 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
strok() заменяет пробел на ноль в конце той строки, которую возвращает. Поэтому надо обратно вернуть пробел Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Правда тут образуется потенциальный косяк в случае если в строке 2 пробела. В этом случае args[2] будет без нуля на конце. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 07:28 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
strtok такая неприятная функция. Слишком разрушительная. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 11:18 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
mayton strtok такая неприятная функция. Слишком разрушительная. strtok_r не слишком. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 19:30 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
еще strtok_r есть версия "с хвостом" достаточно взять два токена, а третий из хвоста. То есть вопрос, откуда взялось число 2 и число 1? Если это заранее известные числа, то почему бы не ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 19:32 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Мне непонятны следующие тестовые сценарии. Отмеченные вопросиком InputOutput"ааа ббб ввв ггг" {"ааа", "ббб","ввв ггг"}"ббб ввв ггг" {"ббб","ввв ггг"}"ввв ггг" {"ввв ггг"} (?)"ггг" {"ггг"} (?)"" {""} (?) Автор проясни как должно быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 19:47 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
что вообще значит "но не до конца"? Оставить последний пробел? А если там два и более подряд пробела? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2020, 20:36 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
mayton Мне непонятны следующие тестовые сценарии. Отмеченные вопросиком InputOutput"ааа ббб ввв ггг" {"ааа", "ббб","ввв ггг"}"ббб ввв ггг" {"ббб","ввв ггг"}"ввв ггг" {"ввв ггг"} (?)"ггг" {"ггг"} (?)"" {""} (?) Автор проясни как должно быть. скажем я хочу разбить на три части - тогда будет "ааа", "ббб","ввв ггг" - третяя часть остается целиком с пробелами. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 08:38 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Dima T strok() заменяет пробел на ноль в конце той строки, которую возвращает. Поэтому надо обратно вернуть пробел Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Правда тут образуется потенциальный косяк в случае если в строке 2 пробела. В этом случае args[2] будет без нуля на конце. не. не работает. а что если сделать что то свое, так например Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 08:45 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
jenya7 не. не работает. У меня работает. Чтоб от проблемы двух пробелов избавиться лучше так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Тест Код: plaintext 1. 2. 3. 4.
Результат Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 08:51 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Dima T jenya7 не. не работает. У меня работает. Чтоб от проблемы двух пробелов избавиться лучше так не знаю. мой компайлер сходит сума. контроллер это все таки не комп :)) хочу проверить свою поделку но при передачи статического массива Код: plaintext 1. 2. 3. 4. 5. 6.
компайлер ругается Error[Pe167]: argument of type "char (*)[128]" is incompatible with parameter of type "char **" и так тоже Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 09:22 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Дело не в компиляторе, это ты не понимашь разницы между массивом массивов и массивом указателей. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 11:01 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Dima T Дело не в компиляторе, это ты не понимашь разницы между массивом массивов и массивом указателей. массив массивов я не могу передать Код: plaintext 1.
Error[Pe098]: an array may not have elements of this type ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 11:24 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
jenya7 mayton Мне непонятны следующие тестовые сценарии. Отмеченные вопросиком InputOutput"ааа ббб ввв ггг" {"ааа", "ббб","ввв ггг"}"ббб ввв ггг" {"ббб","ввв ггг"}"ввв ггг" {"ввв ггг"} (?)"ггг" {"ггг"} (?)"" {""} (?) Автор проясни как должно быть. скажем я хочу разбить на три части - тогда будет "ааа", "ббб","ввв ггг" - третяя часть остается целиком с пробелами. Ты будто не услышал моего вопроса. Чтоб правильно написать твою функцию мы должны уяснить все кейсы. Ты привел 1 частный случай. Я спрашиваю - что будет если на вход подать "Ввв ггг" Здесь твоя логика - неоднозначная. Можно как разбивать так и не разбивать. Как правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 11:25 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
mayton jenya7 пропущено... скажем я хочу разбить на три части - тогда будет "ааа", "ббб","ввв ггг" - третяя часть остается целиком с пробелами. Ты будто не услышал моего вопроса. Чтоб правильно написать твою функцию мы должны уяснить все кейсы. Ты привел 1 частный случай. Я спрашиваю - что будет если на вход подать "Ввв ггг" Здесь твоя логика - неоднозначная. Можно как разбивать так и не разбивать. Как правильно? на сколько частей разбивать я задам в качестве аргумента. понятно что если строка "Ввв ггг" а я хочу разбить на три части то не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 11:54 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
jenya7 Код: plaintext 1.
str_args это массив массивов. Dima T Код: plaintext 1.
r это массив указателей. char** args или char* args[] - это указатель на указатель или массив указателей. Ты бы для начала определился что тебе надо: 1. Разбить строку на подстроки (из отдельных слов) и получить массив указателей на эти подстроки. 2. Скопировать подстроки в массив массивов. В первом посте у тебя не получается первое, а затем ты постишь 22213867 код где делается второе. PS За такое надо руки отрывать. Имя ptr - сокращение от pointer, т.е. указатель, поэтому название обязано соответствовать типу jenya7 Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 12:31 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Dima T jenya7 Код: plaintext 1.
str_args это массив массивов. Dima T Код: plaintext 1.
r это массив указателей. char** args или char* args[] - это указатель на указатель или массив указателей. Ты бы для начала определился что тебе надо: 1. Разбить строку на подстроки (из отдельных слов) и получить массив указателей на эти подстроки. 2. Скопировать подстроки в массив массивов. В первом посте у тебя не получается первое, а затем ты постишь 22213867 код где делается второе. PS За такое надо руки отрывать. Имя ptr - сокращение от pointer, т.е. указатель, поэтому название обязано соответствовать типу jenya7 Код: plaintext 1.
strtok делает динамическое выделение памяти. я в своей ф-ции хочу скопировать подстроки в статически выделенную память. поэтому у меня char str_args[32][128] - строки выделены статически. да это черезмерное выделение памяти но динамическое выделение в эмбедед это зло. и как тогда передать? такой аргумент функция не принимает uint32_t SplitString(char* str, char args[][], uint32_t args_lim) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 12:42 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
jenya7 strtok делает динамическое выделение памяти Наивный. Запусти Код: plaintext 1. 2. 3. 4. 5.
У меня так Код: plaintext 1.
strtok() ничего не выделяет, ничего никуда не копирует, он просто портит исходную строку проставляя нолики (конец строки) взамен пробелов и возвращая указатели на подстроки. В конце добавь вывод str Код: plaintext 1.
там будет только первое слово, а не вся строка ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 12:56 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
jenya7 поэтому у меня char str_args[32][128] - строки выделены статически. и как тогда передать? такой аргумент функция не принимает uint32_t SplitString(char* str, char args[][], uint32_t args_lim) Тебе компилятор говорит как jenya7 Error[Pe167]: argument of type "char (*)[128]" is incompatible with parameter of type "char **" Ты передаешь указатель на массив 128 байт, это важно, а ты размер нигде не указал. Так попробуй Код: plaintext 1.
Проверять некогда, не заработает - напиши позже проверю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 13:04 |
|
Разбить строку
|
|||
---|---|---|---|
#18+
Dima T jenya7 strtok делает динамическое выделение памяти strtok() ничего не выделяет, ничего никуда не копирует, он просто портит исходную строку проставляя нолики (конец строки) взамен пробелов и возвращая указатели на подстроки. спасибо. это меня натолкнуло на новую идею... :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2020, 13:21 |
|
|
start [/forum/topic.php?fid=16&fpage=4&tid=1339724]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 249ms |
total: | 394ms |
0 / 0 |