|
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
|
|||||||||||
В заданном тексте вставить пробелы между буквами02.07.2018, 21:15. Показов 7495. Ответов 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 | |
|
Удалить все символы в строке, не являющиеся буквами и заменить множественные пробелы одним Между буквами в тексте вставить определенный символ Пробелы между буквами после копирования из Маткада в Опенофис! В заданном тексте удалить из текста пробелы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|