2 / 2 / 1
Регистрация: 04.03.2009
Сообщений: 30
|
||||||
1 | ||||||
Удаление лишних пробелов в начале и конце строки.04.03.2009, 13:31. Показов 13585. Ответов 28
Метки нет (Все метки)
Нужно написать функцию char*alltrim(char*string) для удаления пробелов в начале и конце строки с помощью указателей. Помогите завершить задачку.
Возник ряд вопросов: 1) как создать какую-то произвольную переменную типа char ( у меня это p)и записать туда из строки string подстроку начиная с определённого элемента заканчивая другим элементом с помощью указателей? Надо ли в конце этой строки p записать NULL? 2)Как потом эту произвольную переменную ( у меня это p) вернуть как результат работы функции заместо переменной string? 3) Как вобще правильно описать переменную размер которой неизвестен? Вот чего получилось добится:
0
|
04.03.2009, 13:31 | |
Ответы с готовыми решениями:
28
Удаление лишних пробелов в конце строки Удаление пробелов в начале и конце Удаление пробелов в начале и в конце Отрезание пробелов в начале и в конце строки |
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
||||||
14.08.2009, 01:40 | 21 | |||||
char* p = new char[100]; strcpy(p, " 123 "); p = trunc_str(p); delete [] p; ... а теперь - правильный вариант (:
1
|
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
14.08.2009, 11:45 | 22 |
1) Если уже хочется скорости - то писать надо сразу trim двойной - слева и справа. 2) tcslen() вызывать два раза совершенно не нужно. Собственно не нужно вызывать ни одного раза. 3) В условии просили удалить только пробелы. 4) TCHAR - это круто, но насчет Unicode опять же никто не говорил. 5) istspace(), tcsspn() - тоже не нужно вызывать. А вот memmove() похоже пригодится - возможно будет быстрее, чем без него.
0
|
Заблокирован
|
||||||
14.08.2009, 12:46 | 23 | |||||
Выкладываю то что у меня получилось...
Исходный текст содержится в текстовике, подстрока находится между словами в тексте begin и end. Если этих слов в текстовике нето, то подстрока не извлекается. Привожу также результат работы и текстовики (их названия говорят сами за себя)
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
14.08.2009, 14:31 | 24 |
odip,
А вот кстати не очень правильный. 1) Если уже хочется скорости - то писать надо сразу trim двойной - слева и справа. А кто сказал что я хочу скорости? Для меня на первом месте - стабильность. А скорости я захочу тогда, когда профайлер покажет что это самое тормозное место в программе. 2) tcslen() вызывать два раза совершенно не нужно. Собственно не нужно вызывать ни одного раза. попробуй как нибудь переместить область памяти, не зная её размера 3) В условии просили удалить только пробелы. в том и фишка, только пробелы, или ещё табы etc - код не меняется. так зачем выкладывать недоделанную кривульку, если можно сдлелать как надо (Ж 4) TCHAR - это круто, но насчет Unicode опять же никто не говорил. см. выше. 5) istspace(), tcsspn() - тоже не нужно вызывать. а что нужно вызывать? PS. И вот еще - если ты возьмешь на вооружение хотя бы эти два правила, многое откровется для тебя с совершенно новой стороны (((((((:
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
14.08.2009, 16:11 | 25 | |||||
isspace - оно же макрос... ну не хотите - не вызывайте:
0
|
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
14.08.2009, 16:29 | 26 |
Насколько помню макрос этот разворачивается в обращение к массиву, что работает быстрее чем два сравнения. Хотя еще раз повторю: в исходном условии идет речь о пробелах. Добавлено через 10 минут 29 секунд Книжка называется типа "Написание надежных программ". Книжке лет 40, но она до сих пор актуальна. Добавлено через 1 минуту 36 секунд то ты должен найти второй конец в любом случае - чтобы открутить пробелы справа от конца. А раз ты нашел конец строки - ты знаешь длину строки. Нет большой необходимости считать длину. Добавлено через 1 минуту 33 секунды А вот tcsspn() думаю сильно тормознутая функция.
0
|
28 / 28 / 6
Регистрация: 01.07.2009
Сообщений: 58
|
||||||
14.08.2009, 19:28 | 27 | |||||
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
|
|
15.08.2009, 01:34 | 28 |
odip,
Ладно - isspace() можно вызывать. мая имеет благодарить, насяльника! (D Это ты случайно не Маерса тут цитируешь ? http://msdn.microsoft.com/ru-r... 63518.aspx но ты должен найти второй конец в любом случае и как же мне это сделать? А вот tcsspn() думаю сильно тормознутая функция. think different
0
|
alter-sl
|
|
30.03.2010, 16:51 | 29 |
Не мог бы ты написать комментарии к каждой строке?просто я только начинаю изучать язык и не до конца понял как она работает)только основную идею уловил... Буду очень благодарен! Заранее Спасибо!
|
30.03.2010, 16:51 | |
30.03.2010, 16:51 | |
Помогаю со студенческими работами здесь
29
Удаление лишних пробелов в середине строки Удаление лишних пустых строк и пробелов на конце строки Удаление пробелов в начале и в конце строки Удаление пробелов в конце и начале списка Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |