![]() |
|
Модераторы: bsa |
![]()
|
|
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
Добрый вечер, уважаемые программисты! Борланд С++ изучаю сравнительно не долго, соответственно и опыта пока что маловато;) Обращаюсь к вам за помощью, хотелось бы, чтоб вы подкинули идейку, надоумили на решение.
Задача такая: Преобразовать заданную строку следующим образом: заменить все внутренние группы пробелов одним пробелом. Всё это делается при помощи функций библиотеки string.h. С файла в массив фиксированной длины считывается строка с символами, все действия с элементами массива проводятся через указатели. Написал ввод с файла, а дальше хз как. Думаю, что нужно найти первый пробел, далее если за ним идёт ещё один, сдвинуть оставшуюся строку на 1 символ и так далее, как это реализовать - непонятно.
Ещё непонятно почему последний символ повторяется 2 раза. Заранее премного благодарен! Это сообщение отредактировал(а) Winterlord - 16.3.2009, 02:43 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
ПОЛЬЗУЙТЕСЬ ПОИСКОМ.
Тема 100 раз обсуждалась. Вариант: Я не смотрел ваш код - только изменил имена файлов в древнем своем коде
Кажется работает. Это сообщение отредактировал(а) Anikmar - 16.3.2009, 03:11 |
|||
|
||||
| afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
посчитать число пробелов, потом их удалить, и добавить один большой пробел в конец?
и эта, считывай в строку из файла с помощью getline в стринг.
ну и там добавляешь потом куда надо пробелы или еще че, если надо вставить все пробелы на место первого, то удаляешь все кроме первого а можно просто запомнить место первого пробела и потом туда еще инсертом все засунуть ) Добавлено через 14 минут Anikmar, я в твоем коде ни шиша не понял Это сообщение отредактировал(а) afanp - 16.3.2009, 21:47 |
|||
|
||||
| Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Зачем их считать? Задача была оставить максимум по 1 пробелу - вот я и оставляю. Про количество ничего не было сказано:
Просто такую задачу я уже кому-то помогал делать - вот и остался исходник. А что, он не работает? Вроде как работал. |
||||
|
|||||
| goody |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 23.4.2008 Репутация: нет Всего: нет |
Вот еще вариант :
|
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
но не происходит отсечения начальных и конечных пробелов, хотя имхо должны.. вот вариант с таким отсечением и без использования дополнительного буффера.
P.S. А также без конца не гонятся функция strlen() - которая не просто возвращает размер, а при каждом вызове его считает перебором всех символов. Это сообщение отредактировал(а) mes - 16.3.2009, 22:56 |
|||
|
||||
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
Немного поясню задание:
На входе: " The project of the International Phonematic Alphabet " На выходе: " The project of the International Phonematic Alphabet " тоесть должны заменяться только внутренние пробелы на один, а те пробелы, которые находятся перед текстом и за текстом, должны оставаться неизменными. И всё это должно быть реализовано с использованием функций из библиотеки string.h. Обращаться к элементам массива можно только через указатели. Вот и не знаю как сделать=\ Предполагаю, что нужно завести дополнительный массив, искать в первом массиве первый пробел (кроме тех, что перед текстом <-- тоже не совсем понятно как пропустить), далее копировать с исправлениями кусок во второй массив и так далее. В итоге во втором массиве образуется исправленный текст. P.S. Большое спасибо всем откликнувшимся Это сообщение отредактировал(а) Winterlord - 16.3.2009, 23:10 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Если брать конкретно мой пример - модифицируйте его - считывайте сразу строку, а затем формируйте результирующую строку и сохраняйте в другой файл.
Добавлено через 14 минут и 40 секунд Вот с использованием string
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
имеется ввиду эта библиотека http://cplusplus.com/reference/string/string/ ? Если да, то функции find...of() и substr() Вам в помощь. Только вот не пойму к чему тут указатели. Не спутали ли воедино два разных задания ?! |
|||
|
||||
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
Нет, скорее функции вот этой библиотеки: (хотя работаю я в Борланде С++е) http://forum.vingrad.ru/forum/topic-165963...1%82%D0%BC.html И использовать, например, для поиска я хотел strchr() А указатели, думаю, чтоб работать не напрямую со считанным из файла массивом и чтобы к строке через них обращаться, а не посимвольно. Это сообщение отредактировал(а) Winterlord - 17.3.2009, 00:07 |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Что вы там собрались искать? Пробелы что-ли?
Строка - это массив символов. Какие еще дополнительные указатели нужны? Использовать их вместо операции индексирования []? Так это ради Бога. |
|||
|
||||
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
Ну да) я ж писал
Да, наверно так) |
|||
|
||||
| Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 5 Всего: 59 |
Мой алгоритм такой:
Идем посимвольно по строчке. Встретили пробел - проверяем флаг. Если флаг установлен - значит пробел не первый, пропускаем. Если флаг не установлен - пробел первый - записываем в результирующую строку. Если символ вообще не пробел - флаг сбрасываем, символ записываем. Никаких поисков в этой задаче не нужно. Каждый поиск - это пробег с начала строки. Зачем? |
|||
|
||||
| Winterlord |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 5.10.2008 Репутация: нет Всего: нет |
А ваш алгоритм игнорирует пробелы перед текстом и после? |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |