![]() |
|
|
![]()
|
|
| Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
У меня вопрос по строкам Си. Как удалить символ из строки?
Допустим, есть char s[100]. Записываем в s строку "мама мыла раму". Как удалить 'ы' именно в s? Можно так?: поставить указатель на букву 'л' и сдвинуть весь хвост вместе с символом \0? Или можно только записать все в новую переменную без буквы 'ы' или сразу выводить на печать все, кроме 'ы'? Подскажите, пожалуйста...Можно с кодом... Может, где-то на форуме это уже было? Не могу найти |
|||
|
||||
| ManiaK |
|
||||||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: нет Всего: 29 |
Это слишком элементарно (!=тупо!).
Можно, почему же нет?
Надо, конечно, пояснить. Внутри while сначала происходит извлечение значения, на которое указывает p ("*p") и проверка на равенство нулю. Если выражение нулю не равно, то происходит сдвиг указателя вперёд (инкремент, "p++") и выполнение тела цикла. После чего всё повторяется и до тех пор, пока выражение внутри while не станет равно нулю. Может такое подробное объяснение для тебя, Frekenbok, но для кого-то возможно будет полезно. Вообще, компилятор всегда пытается преобразовать результат выражения внутри while к логическому типу; если результат отличен от нуля - true, если нет - false, поэтому писать *p != 0 не обязательно. Тоже касается и других условных конструкций (for, if, ..).
И так тоже можно. Это сообщение отредактировал(а) ManiaK - 7.11.2006, 15:13 |
||||||
|
|||||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
скорее
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: нет Всего: 29 |
archimed7592, спасибо, действительно
|
|||
|
||||
| Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
А так я вставляю 'ы' обратно:
сдвигаю каждый символ с конца и до нужной позиции, а потом просто присваиваю 'ы'.
Может, предложите еще какой-нибудь вариант получше? |
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
||||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
UB, 5.0/8
Это сообщение отредактировал(а) archimed7592 - 7.11.2006, 16:37 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: нет Всего: 29 |
||||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
фу блин, 5/4
другими словами в выражении *p-- = *(p-1); неизвестно что произойдёт раньше - уменьшение p или вычисление (p-1) -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
коротко не значит просто ;)
а простота и отсутствие ошибок сильно коррелируют...
Это сообщение отредактировал(а) maxim1000 - 7.11.2006, 18:18 -------------------- qqq |
|||
|
||||
| Frekenbok |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
А может, проверка на равенство конкретному символу выглядит так: *p!=s[5]? Имелась в виду конкретная позиция 6, т.е. адрес &s[5]. Хороший вариант, спасибо. Только последняя буква теряется. По-моему, надо так:
Добавлено @ 07:19
Смысл и был такой: поставить указатель после нуля и весь хвост сдвинуть на "один" адрес. Или со строками лучше такое не проделывать? Когда char s[100], а длина строки 20, наверное, ничего не будет. А если я выделяю памяти ровно столько, сколько нужно (char s[20]), может вылезти косяк при выходе за границы строки? Или нет? Вроде работает. Лучше не пользоваться такими выражениями (*p-- = *(p-1); )? Эта глава откуда? |
||||||
|
|||||||
| Frekenbok |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 29.10.2006 Репутация: нет Всего: 1 |
||||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: нет Всего: 93 |
ага. "вроде"
точно. по крайней мере не факт, что после смены компилятора твой код будет работать так же. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 1 Всего: 110 |
если есть гарантия того, что position < длины строки, то можно и сразу... Добавлено @ 12:46 в том-то и дело, что часто мы склонны оценивать время только на написание программы, но не на отладку -------------------- qqq |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |