Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/55: Рейтинг темы: голосов - 55, средняя оценка - 4.95
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274

Что такое std::string

30.10.2019, 21:59. Показов 11505. Ответов 68
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
int main(){
 
std::string s;
std::string st="it string";
for(int i=0; i<9; ++i){s[i]=st[i];};
 
 
std::cout << s;
 
}

скажите пожалуйста , что сейчас находится в s?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2019, 21:59
Ответы с готовыми решениями:

Что такое std::string()
И скал в гугле- там ничего понимаемого. Начну, что я вообще в символьных не шарю. Обьясните пожалуста, что это и что оно делает. ...

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка error: cannot convert 'std::string {aka...

Запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

68
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
01.11.2019, 17:32  [ТС]
Студворк — интернет-сервис помощи студентам
когда в С++ я делаю вот так
C++
1
2
3
4
5
6
7
int main(){
std::string st="hi my Linux";
std::string s;
s=st;// я что перепресваиваю объекты класса string?
 
 
}
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
01.11.2019, 18:00
Цитата Сообщение от pcmax Посмотреть сообщение
s=st;// я что перепресваиваю объекты класса string?
У тебя есть код реализации std::string. У тебя есть тот же отладчик. Почему ты этим не пользуешься, чтобы ответить себе на этот вопрос? Код basic_string, это не boost spirit, в нем не так сложно разобраться. В чем твоя проблема?
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.11.2019, 18:05
Цитата Сообщение от Vourhey Посмотреть сообщение
В чем твоя проблема?
Vourhey, глядя в последний вопрос видно, что нет понятий о инициализации и присваивании. А ранее выяснилось, что нет понятия о с-строках и std::string. То есть, не будет толку от просмотра текстов стандартной библиотеки.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,347
01.11.2019, 19:19
Цитата Сообщение от pcmax Посмотреть сообщение
когда в С++ я делаю вот так
C++
1
2
3
4
5
int main(){
std::string st="hi my Linux";
std::string s;
s=st;// я что перепресваиваю объекты класса string?
}
Почему "пере-"? Вы просто присваиваете объекты класса std::string.
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
02.11.2019, 13:33  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Почему "пере-"? Вы просто присваиваете объекты класса

и что происходит потом? почему я не могу прочитать после этого с присвоенного объекта, как с того объекта ,который присвоил?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 13:45
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
почему я не могу прочитать после этого с присвоенного объекта, как с того объекта ,который присвоил?
все ты можешь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main()
{
    std::string s1 {"X"}, s2;
    s2 = s1;
 
    std::cout << s2 << s1;
 
    return 0;
}
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.11.2019, 14:01
_stanislav, си-строки смешаны со стандартными. Инициализация с присвоением. А оно и в реализации небезопасно, кстати. То есть, требует осторожности, так как массив и с-строка не отличимы по типу. Только формат (ноль-терминатор) их отличает)
C++
1
2
3
4
5
6
7
string std_str;
    std_str="kaka";
    cout<<std_str<<endl;
    char mina[4]={'m','i','n','a'};//инициализация
   //mina="mina";//присвоение
    std_str=mina;//будет бабах
     cout<<std_str<<endl;//бабах!
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 14:09
Цитата Сообщение от IGPIGP Посмотреть сообщение
си-строки смешаны со стандартными
где смешаны?

Добавлено через 4 минуты
IGPIGP, так и не нужно в std::string засовывать символьный массив без терминатора, ТСу это зачем, у него в коде литерал нультерминированный.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.11.2019, 16:33
Цитата Сообщение от _stanislav Посмотреть сообщение
IGPIGP, так и не нужно в std::string засовывать символьный массив без терминатора
Я не о том. Оно не нужно, конечно. Я о том, что контроль типов не отличает массивы с нулём и без (тип то один) и присваивание компилируется. Это по сути дыра, где ответственность на программере. Но наследие есть наследие. Я о том, что присвоение и инициализация это разные вещи. А вопросов по связанных с с-строками можно задать и в контексте работы с стандартными не мало. А нужно начать по порядку. Сначала уяснить что есть присвоение, а что - инициализация. А потом уже приведения типа при копировании и приравнивании. И точно отличать разные виды строк нужно, тоже. А пока нет этого нет смысла объяснять.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 16:50
Цитата Сообщение от pcmax Посмотреть сообщение
Что такое std::string
std::string это структура данных (typedef basic_string<char> string), Мейерс в STL говорил вроде бы, что в некоторых случаях, я пока не дочитал в каких, вместо basic_string<char>, лучше использовать std::vector<char>.
1
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
02.11.2019, 16:54
_stanislav, когда не нужен принудительный завершающий ноль, то вместо std::string лучше использовать std::vector<char>

но вообще, не могу придумать случая, когда это может помешать. Разве что тот случай, когда аргумент функции имеет именно тип std::vector<char>
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 17:01
Цитата Сообщение от Алексей1153 Посмотреть сообщение
когда не нужен принудительный завершающий ноль
думаю что ноль не единственная причина.
0
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
02.11.2019, 17:03
_stanislav, возможно, но я только одну причину смог придумать - в предыдущем посте. Если контейнер используется как массив, то разницы нет, есть ли там ноль после гарантированного заявленного количества элементов
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
02.11.2019, 17:37
Цитата Сообщение от _stanislav Посмотреть сообщение
Мейерс в STL говорил вроде бы, что в некоторых случаях, я пока не дочитал в каких, вместо basic_string<char>, лучше использовать std::vector<char>.
Алексей1153, читанул Мейерса, короче, цитата:

Если доступная реализация string построена на подсчете ссылок, а ее использование в
многопоточной среде порождает проблемы с быстродействием, возможны по крайней мере
три разумных варианта, ни один из которых не связан с отказом от STL. Во-первых,
проверьте, не позволяет ли реализация библиотеки отключить подсчет ссылок (обычно это
делается изменением значения препроцессорной переменной). Конечно, переносимость при
этом теряется, но с учетом минимального объема работы данный вариант все же стоит
рассмотреть. Во-вторых, найдите или создайте альтернативную реализацию string (хотя бы
частичную), не использующую подсчета ссылок. В-третьих, посмотрите, нельзя ли
использовать vector<char> вместо string. Реализации vector не могут использовать подсчет
ссылок, поэтому скрытые проблемы многопоточного быстродействия им не присущи.
Конечно, при переходе к vector<char> теряются многие удобные функции контейнера string,
но большая часть их функциональности доступна через алгоритмы STL, поэтому речь идет
не столько о сужении возможностей, сколько о смене синтаксиса.

1
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
02.11.2019, 17:56
_stanislav, кстати, я вот щас задумался. При многопоточности я обычно использую CString (MFC) или QString (Qt) - они юзают COW . Переменные я, конечно, синхронизирую, только сейчас что-то не пойму, почему не поломалось ничего из-за COW. А ведь ни разу не поломалось, всё чётко, проектов много, потоков в них много. Я понимаю, что магии не бывает )) Видимо, подсчёт ссылок у них внутри синхронизирован
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.11.2019, 18:10
Цитата Сообщение от Алексей1153 Посмотреть сообщение
А ведь ни разу не поломалось, всё чётко
Алексей1153 речь не о краше, а о снижении скорости. Каждая блокировка должна блокировать множество строк, если они представлены разделяемо (если речь об этом). Это моё предположение.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
02.11.2019, 18:28
Цитата Сообщение от _stanislav Посмотреть сообщение
Если доступная реализация string построена на подсчете ссылок
Книжка не учитывает современные версии C++?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13215 / 6847 / 1826
Регистрация: 18.10.2014
Сообщений: 17,347
02.11.2019, 19:18
Цитата Сообщение от pcmax Посмотреть сообщение
почему я не могу прочитать после этого с присвоенного объекта, как с того объекта ,который присвоил?
Не знаю, почему. Это уже у вас надо спрашивать, почему вы не можете.

Все прекрасно читается. Никаких проблем.
0
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,372
02.11.2019, 19:19
IGPIGP, ну, блокировка заметных тормозов не привнесёт, строка быстро скопируется и всё. У меня не было таких трафиков между потоками, чтобы заметить такие задержки. Но само копирование вне синхронизации, видимо, синхронизируется внутри класса. разработчики должны были учесть многопоточность
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
02.11.2019, 19:25
Цитата Сообщение от Алексей1153 Посмотреть сообщение
IGPIGP, ну, блокировка заметных тормозов не привнесёт, строка быстро скопируется и всё.
Если внутренне строка это кучка других строк которые хранятся по счётчикам своих ссылок (разделяемое представление строк), то трудно сказать сколько объектов будут блокировать (методами конечно) работу с одним экземпляром внешнего представления) Тут предположения - скользкая вещь.
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Но само копирование вне синхронизации, видимо, синхронизируется внутри класса. разработчики должны были учесть многопоточность
Зачем за это платить в одном потоке? Не знаю. Вообще, разговоры о реализации (и её настраиваемых вариантах) это далеко от ТС.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2019, 19:25

что такое std::out
люди, в общем препод нам попался из разряда &quot;пришел унизился ушел&quot; ты ему слово, он тебе в ответ десять вопросов он задал мне банальый...

Что такое std::allocator<T> ?
я так понял возвращает адрес чего то?

std::map что такое и с чем это есть
попытался найти док-ию по map, но так и не нащёл. есть у кого ли нормальная док-ия по Map?

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Что означает std::string to_string( int value )?
Что означает: std::string to_string( int value )


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru