|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.11.2011, 19:58 | #1 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 7
|
Обработка символьного массива с пом. указателей
while(*st)
{ if(*st == symb) { while(*p_st != *st) { *p_st=*(p_st+1); *p_st--; } *(st+1)=*st; *st = *(st+2); } *st++; } Вводим символ и строку с клавиатуры. Ищем такие же символы в строке и надо рядом с ними дописать этот же символ. Напирммер ввели символ Ш и слово ШАЛАШ. Должно получиться ШШАЛАШШ. Код набросал. C++ |
01.11.2011, 22:32 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
А получится - ШШЛАШШfr;klh58471ttr4p
Массив - тип данных фиксированного размера, в него без танцев с бубном нельзя "вставить" дополнительные буквы. Но можно читать массив по одному символу, а на печать выводить один или два. |
01.11.2011, 22:40 | #3 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 7
|
str = new char(strlen(tmp)+count+1);
strcpy_s(str, strlen(tmp)+1, tmp); tmp[80]; сам массив куда ввели предложение посчитали количество count вхождений в него символа + нулевой байт. В указатель разименуем блок памяти чтоб решить эту задачу. Так что без бубнов обойдёмся Код:
Последний раз редактировалось magrif; 01.11.2011 в 22:54. |
01.11.2011, 22:57 | #4 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Решение за два прохода? Ну ладно, а что хотите-то?
В изначальном коде, кто такие st и p_st? Код:
|
01.11.2011, 23:00 | #5 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 7
|
st и p_st это указатели
*st указывает на 1-й символ в массиве, а p_st равен нулевому байту |
01.11.2011, 23:01 | #6 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 7
|
Код:
|
01.11.2011, 23:08 | #7 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Заведите две строки - исходная (по которой пойдёт курсор str) и результирующая, удлиннённая (по которой пойдёт курсор rec). И тупо, пока не кончилась первая строка, один символ переписывайте всегда, а если символ - требуемый, то в результирующую строку дописывайте ещё один.
|
01.11.2011, 23:11 | #8 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 7
|
В том то и подковырка, что дополнительные массивы и блоки памяти низя создавать. Что Бог дал, то и юзай.
|
02.11.2011, 00:09 | #9 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Долго думал.
Код:
Код:
Код:
Да можно обойтись одним массивом, просто это ненужная сложность и при неизменном порядке расхода памяти O(N) ограничение выглядит довольно странно. Скажем, так: пусть есть удлинённый массив, тогда поставить один курсор на конец текста (на '\0'), второй - на конец самого массива. И задом наперёд, переносить символ с первого курсора на второй, сдвигать второй, после чего при нужном символе под первым курсором повторять перенос и только потом сдвигать первый курсор. И так пока первый курсор не сравняется со вторым (курсоры, не символы под ними!). |
02.11.2011, 07:11 | #10 |
Новичок
Джуниор
Регистрация: 01.11.2011
Сообщений: 7
|
Разрешен один массив - тмп 80 и область памяти. И с этой областью нужно работать.
да да да, как сравнить курсоры, а не символы? Последний раз редактировалось magrif; 02.11.2011 в 07:13. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ошибка очистки памяти символьного массива BLOCK_TYPE_IS_VALID(pHead->nBlockUse) | dasvex | Помощь студентам | 2 | 08.08.2011 02:05 |
С. Вывод символьного массива - результат удручающе не понятен | Алексей Денисов | Помощь студентам | 5 | 05.07.2011 10:30 |
Удаление элемента из символьного массива | Mixim | Visual C++ | 4 | 03.12.2010 16:38 |
C++. Обработка строк при помощи указателей. | akafanta | Помощь студентам | 0 | 01.11.2009 17:33 |
Сортировка массива указателей | Джед | Общие вопросы C/C++ | 3 | 02.06.2009 14:18 |