С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 31.05.2022
Сообщений: 5
1

Заменить терминальный ноль в конце строки string

08.09.2022, 23:38. Показов 1554. Ответов 17

Author24 — интернет-сервис помощи студентам
подскажите, пожалуйста, как найти нулевой (последний) элемент в string? то есть мне нужно, чтобы при нахождении в string элемента, который заканчивает строку, можно было изменить его.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2022, 23:38
Ответы с готовыми решениями:

Как переместить терминальный ноль из одного места строки в другое?
Здравствуйте. Пожалуйста, подскажите, что можно сделать, чтобы решить следующую проблему:...

Как сделать чтобы терминальный символ был в конце строки
Написал код, но что-то не пойму как сделать что бы терминальный символ был в конце строки.. он туда...

Ноль символ на конце строки
В каких случаях в конце строки надо приделывать \0 ?

В конце каждой строки ячейки вставить ноль
Как в конце каждой строки ячейки вставить ноль ексель. Не в конце ячейки. А именно в конце строки....

17
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
08.09.2022, 23:44 2
C++
1
2
std::string tmp = "abra";
tmp[tmp.length()] = '\0';
0
Модератор
Эксперт С++
13706 / 10909 / 6473
Регистрация: 18.12.2011
Сообщений: 29,126
09.09.2022, 08:53 3
Цитата Сообщение от programmer_08 Посмотреть сообщение
tmp[tmp.length()] = '\0';
Ноль там уже стоит, ТС похоже хочет
Цитата Сообщение от meowwww Посмотреть сообщение
можно было изменить его
C++
1
tmp[tmp.length()] = другое_значение;
Замена терминального нуля чревато неожиданными последствиями.
Все сишные функции подразумевают, что он стоит в нужном месте.

А чем плохо просто дописать новое значение в конец:
C++
1
tmp+='a';
???????
0
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
09.09.2022, 17:05 4
Цитата Сообщение от zss Посмотреть сообщение
Ноль там уже стоит, ТС похоже хочет
ну да, просто нужно же было что-то написать)
Цитата Сообщение от zss Посмотреть сообщение
А чем плохо просто дописать новое значение в конец:
наверное человек всё-таки нужно заменить ноль-литеру, чтобы потом ловить ошибки и веселиться со std::string)
0
Неэпический
18108 / 10695 / 2062
Регистрация: 27.09.2012
Сообщений: 26,928
Записей в блоге: 1
09.09.2022, 17:16 5
Цитата Сообщение от meowwww Посмотреть сообщение
Заменить терминальный ноль в конце строки string
http://eel.is/c++draft/string.access
constexpr const_reference operator[](size_type pos) const;
constexpr reference operator[](size_type pos);

1 Preconditions: pos <= size().
2 Returns: *(begin() + pos) if pos < size(). Otherwise, returns a reference to an object of type charT with value charT(), where modifying the object to any value other than charT() leads to undefined behavior.
0
0 / 0 / 0
Регистрация: 31.05.2022
Сообщений: 5
09.09.2022, 20:13  [ТС] 6
я просто хотела написать условие, при котором после прочтения всей строки и нахождения последнего элемента в string записывать в текстовый файл эту строку с добавлением '\n'
но мне кажется, что я очень замудрила и это можно сделать как-то более грамотно((
0
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
09.09.2022, 20:38 7
C++
1
Std::ofstream << std::string << '\n';
0
Нарушающий
417 / 305 / 46
Регистрация: 13.04.2022
Сообщений: 1,759
09.09.2022, 20:50 8
puts()

пишет строку, и добавляет \n
0
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
09.09.2022, 20:58 9
QueryMonkey, так это ж в консольку вроде
0
Вездепух
Эксперт CЭксперт С++
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,870
09.09.2022, 21:10 10
Цитата Сообщение от meowwww Посмотреть сообщение
пожалуйста, как найти нулевой (последний) элемент в string?
Ничего не понял. Что значит "последний"? Почему он вдруг "нулевой"? И зачем его "искать", если вы как будто и так знаете, где он находится?

Цитата Сообщение от meowwww Посмотреть сообщение
то есть мне нужно, чтобы при нахождении в string элемента, который заканчивает строку,
В std::string нет никакого выделенного "элемента, который заканчивает строку". std::string - это строка с хранимой длиной. Ей не нужен никакой специальный "элемент, который заканчивает строку".

Цитата Сообщение от meowwww Посмотреть сообщение
можно было изменить его.
Цитата Сообщение от meowwww Посмотреть сообщение
Заменить терминальный ноль в конце строки string
В std::string запрещается (UB) менять на что-то иное нулевой элемент, располагающийся за последним элементом строки.

Для чего это все вам понадобилось?
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
09.09.2022, 23:05 11
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В std::string нет никакого выделенного "элемента, который заканчивает строку"
есть:

Returns: *(begin() + pos) if pos < size(). Otherwise, returns a reference to an object of type charT with value charT(), where modifying the object to any value other than charT() leads to undefined behavior.
charT() - это и есть "элемент, который заканчивает строку"

стандарт гарантирует:
C++
1
2
3
4
5
6
7
8
9
#include <cassert>
#include <string>
 
int main()
{
    const std::string v = "123";
    const char& e = v[v.size()];
    assert(e == std::string::value_type{});
}
Добавлено через 1 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
запрещается (UB)
UB - это не запрет.
оно никому ничего не запрещает.
0
Вездепух
Эксперт CЭксперт С++
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,870
10.09.2022, 00:06 12
Цитата Сообщение от hoggy Посмотреть сообщение
charT() - это и есть "элемент, который заканчивает строку"
стандарт гарантирует:
Это не более чем повторение слово-в-слово того, что я уже ясно написал выше.

Тем не менее никакого отношения к "заканчиванию строки" этот элемент не имеет. Как я тоже ясно объяснил выше.

Цитата Сообщение от hoggy Посмотреть сообщение
UB - это не запрет.
оно никому ничего не запрещает.
Зайчик мой, вам здесь никто ничего не запрещает.

Я веду речь о языке С++, являющемся темой данного форума. Программа, содержащая UB, не является программой на С++ - таковы правила языка. Это жестоко, но справедливо. Это ясно дает понять, что означает слово "запрещается" в моем сообщении выше. Хотя всем, я думаю, это было понятно и так.

P.S. Я смотрю, такие элементарные вещи приходится вдалбливать по кругу снова и снова. Мне кажется, что кто-то тут не посвящает конспектированию моих постов и последующему еженощному их штудированию должного времени.
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
10.09.2022, 00:57 13
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Тем не менее никакого отношения к "заканчиванию строки" этот элемент не имеет.
Ещё как имеет. Потому что именно это и делает этот символ.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Зайчик мой, вам здесь никто ничего не запрещает.
Зайчик - твоя мама.

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Программа, содержащая UB, не является программой на С++ - таковы правила языка.
Не выдумывай чушь.
Программа на языке с++, которая содердит UB - это программа на языке с++, которая содержит UB.
И от того, что программа на языке с++ содержит UB, она не перестает быть программой на языке с++.
0
455 / 322 / 64
Регистрация: 09.03.2016
Сообщений: 3,181
10.09.2022, 01:44 14
https://acm.bsu.by/wiki/C2018/... 1.D1.8B_UB

Добавлено через 1 минуту
Неопределённое поведение

Добавлено через 51 секунду
Статейка не плохая...
0
455 / 322 / 64
Регистрация: 09.03.2016
Сообщений: 3,181
10.09.2022, 01:59 15
Заменить терминальный ноль в конце строки string
0
Вездепух
Эксперт CЭксперт С++
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,870
10.09.2022, 02:00 16
Цитата Сообщение от Наталья8 Посмотреть сообщение
Статейка не плохая...
Статья написана исключительно для языка С. В ряде разделов - написана чушь или просто "заглушки", как будто автор хотел дописать статью потом, но не дописал.
0
455 / 322 / 64
Регистрация: 09.03.2016
Сообщений: 3,181
10.09.2022, 02:03 17
По нулю вылетает безотказно...
0
Вездепух
Эксперт CЭксперт С++
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,870
10.09.2022, 02:06 18
Цитата Сообщение от Наталья8 Посмотреть сообщение
По нулю вылетает безотказно...
Это к чему здесь? Кто-то сказал, что ваша программа не будет вылетать по нулю?
0
10.09.2022, 02:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2022, 02:06
Помогаю со студенческими работами здесь

терминальный ноль
TDateTime Date = Now(); UnicodeString DateTimeS =Date.FormatString(&quot;h:n dd.mm.yyyy&quot;);...

что такое терминальный ноль?
что такое терминальный ноль? для чего он нужен? ищу ,и что-то нигде об этом не написано ...

Найти номера строки макс элемента и заменить ее на ноль
сделал массив и заполнил его, помогите Найти номера строки макс элемента и заменить ее на ноль ...

Заменить четный элемент каждой строки массива на ноль
Написал программу для считывания элементов матрицы из файла, но не знаю как написать процедуру...

Заменить каждый элемент строки в квадратной матрице на ноль
program sl9 integer a(100,100),max print,'vvedite razmer' read,n do i=1,n read,(a(i,j),j=1,n)...

Удалить пробелы до начала строки и в конце, заменить группу пробелов на *
import java.util.Scanner; public class Main { public static void main(String args) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru