|
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
|
|||||||||||
В заданном тексте вставить пробелы между буквами02.07.2018, 21:15. Показов 7542. Ответов 30
Добрый вечер всем. Как мне для данной проги учесть пробелы между буквами в строке? (функция space_between_letters) Со строкой я на Вы, поэтому прошу помощи с работою над нею:
Нарыл функцию isalnum(), которая проверяет, является ли символом то, что содержится в теле функции или нет, реализовал проверку, все дела и получилось, только теперь появляется помимо строки, которая вышла, строка, которая была. Что мне с этим делать? Сам код:
0
|
|||||||||||
| 02.07.2018, 21:15 | |
|
Ответы с готовыми решениями:
30
В тексте вставить между словами вместо одного пробела запятую и пробел |
|
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
|
|
| 06.07.2018, 07:35 [ТС] | |
|
Спасибо за ответ, понял getline: воспользуюсь им
Я также спросил о том, как действует цикл в проге gru74ika, можете объяснить?Добавлено через 1 минуту insert, size(), at.. Кто они такие?
0
|
|
|
483 / 275 / 57
Регистрация: 08.10.2015
Сообщений: 1,190
|
|
| 06.07.2018, 10:09 | |
|
Путаница из-за неправильного названия темы. Вместо "Как учесть пробелы между буквами" надо было написать " Как вставить пробелы между буквами".
1
|
|
|
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
|
|
| 06.07.2018, 12:01 [ТС] | |
|
Логика?
Помогите вместо того, что-бы обсуждать несколько страниц подряд, как я неправильно написал название темы. Оно не было осмысленно: торопился. Пожалуйста.
0
|
|
|
Модератор
|
|||||
| 06.07.2018, 12:48 | |||||
|
Так что, вместо того, чтобы огрызаться, можно было вежливо поблагодарить неравнодушных форумчан за советы и извиниться. Добавлено через 2 минуты
0
|
|||||
|
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
|
||||||
| 06.07.2018, 13:09 [ТС] | ||||||
|
Во-первых, я не огрызался, во-вторых, прошу прощения: виноват за название темы, в третьих, я кажется дал уже понятное условие того, что мне требуется и в четвёртых, у меня действительно не так много времени на программу: мне нужно сделать её и парочку других заданий, что-бы я мог приняться за курсовую.. А программу, которую Вы мне, собственно, и дали я не понимаю: пожалуйста, объясните мне принцип, по которому работает цикл в ней. А ссылки, которые Вы мне дали, я использовал, прочёл материал, но getline не работает (ну, исходя из неопытности моей) Вот то, что я пытался реализовать (ошибка преобразования string в char):
0
|
||||||
|
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
|
|||||||
| 06.07.2018, 13:32 | |||||||
string, или передавай
const char * поэтому для работы с такой строкой копирнуть в буфер надо будет.Но если у тебя string, меняй на string и не парься
0
|
|||||||
|
Модератор
|
||||||||||||||||
| 06.07.2018, 15:52 | ||||||||||||||||
|
N0VY, ну, давайте, разберём всё пошагово. Итак, вот код функции:
str - строку библиотечного типа std::string. Передача внутрь функции происходит по ссылке (значок амперсанда - &), что означает, что наша функция будет работать с оригиналом строки, а не с копией1.Далее, цикл. Первое, что мы видим - тип счётчика в цикле у нас size_t. Это библиотечный целочисленный беззнаковый тип. Почему size_t, а не unsigned int, читаем по ссылке. Так, стоп-стоп... А из-за чего весь сыр-бор? Зачем вообще для переменной-счётчика нам понадобился беззнаковый тип? Почему не просто какой-нибудь int? Ну так int же - знаковый! А разве может у нас количество итераций (витков цикла) быть, скажем, -1? Не может. То-то и оно. Вот поэтому и нужен нам беззнаковый тип2, чтобы явно отразить этот факт для тех, кто потом будет читать наш код. Функция-член size возвращает размер строки. Таким образом, если мы хотим узнать размер строки str, нам просто надо написать str.size()В перой секции цикла for у нас идёт объявление двух переменных - счётчика i типа size_t, и ограничителя limit типа size_t - для условия окончания цикла. Почему limit у нас равен str.size()*2-1? Давайте разбираться.Представим себе совсем маленькую строку, например такую: "code". Нам нужно превратить её в "c o d e". Элементы в исходном массиве у нас будут иметь такие индексы:
Идём дальше. Если вставлять пробелы после каждого символа, то между словами получится по два пробела, а нам этого не надо. Вот тут-то у нас и появляется оператор ветвления if внутри цикла, который не позволяет вставлять пробел перед пробелом. В условии ифа встречаем функцию-член at (см. тут и тут). А именно мы видим вот такую запись: str.at(i). Это более безопасный вариант записи str[i]. В случае выхода за пределы массива, функция-член at сгенерирует исключение std::out_of_range, в то время как operator[] не выполняет никаких проверок.Функция-член insert (см. тут и тут) принимает два параметра: первый - это позиция, в которую будет произведена вставка, а второй параметр - это символ (или строку), который будет вставлен. То есть, запись str.insert(i, " "); означает следующее: в строке str вставить перед символом с индексом i строку " "Вот, собственно, и всё. _______________________________ 1При передаче в функцию параметра по значению работа внутри функции ведётся не с оригиналом переданного параметра, а с его локальной копией. 2При использовании беззнаковых типов в качестве счётчиков цикла следует быть внимательным и не допускать того, что называется wrap around (обращение значения). Проблема актуальна при декременте счётчика. Подробнее см. в книге Стенли Липпмана и Барбары Му "Язык программирования C++. Базовый курс" (5 издание, стр. 68).
0
|
||||||||||||||||
|
Модератор
|
||||||
| 06.07.2018, 16:29 | ||||||
Сообщение было отмечено N0VY как решение
Решение
Чтобы лучше понять, что происходит внутри функции, можно снабдить её вот такими диагностическими сообщениями (временно, просто для отладочных целей):
2
|
||||||
|
Модератор
|
||||||
| 06.07.2018, 16:55 | ||||||
|
А вообще, конечно, я намудрил. Можно ещё проще сделать:
1
|
||||||
|
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
|
|
| 07.07.2018, 08:34 [ТС] | |
|
Самое понятное объяснение, которое я когда-либо видел. Большое спасибо Вам, gru7rik! Благодарен
1
|
|
| 07.07.2018, 08:34 | |
|
Удалить все символы в строке, не являющиеся буквами и заменить множественные пробелы одним Между буквами в тексте вставить определенный символ Пробелы между буквами после копирования из Маткада в Опенофис! В заданном тексте удалить из текста пробелы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml,
в чате форсили функторы модулей как суперфичу.
Пытаясь отдуплить концепт, наткнулся на тутор с простым примером.
А главный принцип обучения от. . .
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|