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

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

30.10.2019, 21:59. Показов 10872. Ответов 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
Нарушитель
10228 / 5658 / 1259
Регистрация: 12.03.2015
Сообщений: 26,227
30.10.2019, 22:18
Сюда.

0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
30.10.2019, 23:04  [ТС]
почему не выводится "s"?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
30.10.2019, 23:08
Потому что нет Арнольда Шварценегера?
0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.10.2019, 13:37  [ТС]
вы говорите батенька ересь!

учебники заявляют , что строка в С++ это массив символов с '\0' конце.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(){
 
 
 
std::string st; тут по логике учебника должен быть массив с одним элементом '\0';
 
я могу сделать так
 
std::string srt="Hi forum";
st=str;  // значит st должен быть динамическим массивом.  но мы не может менять размерность динамического массива.  
 или так 
for(int i=0; i<9; ++i){st[i]=str[i];};
тогда что происходит?
}
1
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
31.10.2019, 14:23
pcmax, не путайте понятия
C++
1
string st;
это STL контейнер для работы со строками. В нем, в частности, определен метод operator=. Поэтому можно писать
C++
1
st=str;

C++
1
char str[100];
это массив символов, который заканчивают символом '\0'.
Для копирования строки в этом случае лучше пользоваться strcpy
C++
1
strcpy(st,str);
Ну, или посимвольно, как у Вас в 12 строчке кода.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.10.2019, 14:53  [ТС]
как вот верить учебникам?

другие источники говорят, что String -это класс.

C++
1
2
std::string st;  //создаю объект класса string, где :: -указывает на принадлежность к классу. 
st = "this metod"; // = перегруженный метод.
только почему мы в него передаем данные в " " ковычках?

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
не путайте понятия

не я путаю уважаемый почетный модератор.... так пишут учебники. где правда?
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
31.10.2019, 16:25
Цитата Сообщение от pcmax Посмотреть сообщение
только почему мы в него передаем данные в " " ковычках?
потому что у него есть перегруженный оператор = принимающий const char *
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.10.2019, 17:28  [ТС]
Цитата Сообщение от woldemas Посмотреть сообщение
потому что у него есть перегруженный оператор = принимающий const char *


как я понял оператор = перегружен. можете написать что в теле?

C++
1
string operator =() {   };
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
31.10.2019, 19:03
Цитата Сообщение от pcmax Посмотреть сообщение
что в теле?
Почему это Вас волнует?
Цитата Сообщение от pcmax Посмотреть сообщение
string operator =() { };
Правильное объявление такое:
C++
1
string& operator =(const char*);
0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.10.2019, 19:32  [ТС]
не объявление, тело.... господа, что в теле?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
31.10.2019, 20:30
Цитата Сообщение от pcmax Посмотреть сообщение
скажите пожалуйста , что сейчас находится в s?
Ничего нигде не находится. Строка s имеет размер 0 и попытки доступа к каким либо ее элементам через оператор [] приводят к неопределенному поведению.

Цитата Сообщение от pcmax Посмотреть сообщение
почему не выводится "s"?
Код имеет неопределенное поведение.

Цитата Сообщение от pcmax Посмотреть сообщение
учебники заявляют , что строка в С++ это массив символов с '\0' конце.
Строка в С (а не в С++) - это массив символов с '\0' конце. Такие строки поддерживаются и в С++, где они называются C-строками.

Однако строки std::string не имеют ко всему этому никакого отношения. С-строки и строки std::string - это совершенно разные вещи.

Цитата Сообщение от pcmax Посмотреть сообщение
другие источники говорят, что String -это класс.
Не String, а std::string. И да, это класс.

Цитата Сообщение от pcmax Посмотреть сообщение
только почему мы в него передаем данные в " " ковычках?
Потому что мы передаем строковый литерал. В языке С++ строковый литерал записывается именно так - в кавычках.

Цитата Сообщение от pcmax Посмотреть сообщение
так пишут учебники. где правда?
В учебниках, скорее всего, все написано правильно. Это у вас просто наблюдаются затруднения с пониманием прочитанного. Учебник вам рассказывает про С-строки, а вы почему-то пытаетесь все это проверять на строках std::string.

Цитата Сообщение от pcmax Посмотреть сообщение
господа, что в теле?
Никто не знает, "что в теле". "Что в теле" зависит от реализации. Возьмите исходные тексты любой реализации стандартной библиотеки и посмотрите сами. Но имейте в виду, что там все может быть очень и очень наворочено.
1
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
31.10.2019, 22:02  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это у вас просто наблюдаются затруднения с пониманием прочитанного.

при чем тут Си строка, когда учебник был для С++. пофиг вобщем.

где посмотреть как реализован класс string?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,176
31.10.2019, 22:24
Цитата Сообщение от pcmax Посмотреть сообщение
при чем тут Си строка, когда учебник был для С++.
Потому что, как я ясно сказал выше, в языке С++ вы можете работать и с С-строками. Никто вам этого не запрещает. Более того, С-строки по-прежнему являются фундаментально важной частью языка С++.

Цитата Сообщение от pcmax Посмотреть сообщение
где посмотреть как реализован класс string?
Сделать поиск в Интернете?

https://gcc.gnu.org/onlinedocs... ource.html
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
01.11.2019, 07:55
Цитата Сообщение от pcmax Посмотреть сообщение
почему не выводится "s"?
Потому что

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
pcmax.c++(3): error C2039: string: не является членом "std"
predefined C++ types (compiler internal)(262): note:  см. объявление "std"
pcmax.c++(3): error C2065: string: необъявленный идентификатор
pcmax.c++(3): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "s"
pcmax.c++(3): error C2065: s: необъявленный идентификатор
pcmax.c++(4): error C2039: string: не является членом "std"
predefined C++ types (compiler internal)(262): note:  см. объявление "std"
pcmax.c++(4): error C2065: string: необъявленный идентификатор
pcmax.c++(4): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "st"
pcmax.c++(4): error C2065: st: необъявленный идентификатор
pcmax.c++(5): error C2065: s: необъявленный идентификатор
pcmax.c++(5): error C2065: st: необъявленный идентификатор
pcmax.c++(8): error C2039: cout: не является членом "std"
predefined C++ types (compiler internal)(262): note:  см. объявление "std"
pcmax.c++(8): error C2065: cout: необъявленный идентификатор
pcmax.c++(8): error C2065: s: необъявленный идентификатор
1
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
01.11.2019, 08:17
Цитата Сообщение от pcmax Посмотреть сообщение
господа, что в теле?
Дух. В здоровом — здоровый. В больном — больной.
4
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.11.2019, 11:27
Цитата Сообщение от pcmax Посмотреть сообщение
при чем тут Си строка, когда учебник был для С++. пофиг вобщем.
pcmax, тут же не базар. Каждое слово важно. Вы сказали:
Цитата Сообщение от pcmax Посмотреть сообщение
учебники заявляют , что строка в С++ это массив символов с '\0' конце.
назовите хотя бы один, в котором, это сказано именно о std::string
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
01.11.2019, 12:08
Цитата Сообщение от pcmax Посмотреть сообщение
учебники заявляют , что строка в С++ это массив символов с '\0' конце.
Строка это абстракция - последовательность каких-то символов. Именно абстракция никак не ограничивает способ хранения, размер и т.д., это вопрос реализации.
char str[100]; - реализация строки в Си, через массив char'ов, ограниченный терминирующим нулем
wchar_t str[100]; - реализация UTF-32 (в странных ОС - UTF-16) строки в Си.
std::string str; - реализация строки в С++ через класс
std::wstring str; - реализация UTF-32 (опять же некоторые делают UTF-16) через класс в С++
var str:string; - реализация строки в Паскале. Отличается от Си-шной строгим ограничением длины и отсутствием терминирующего нуля
SomeString str; - ручная реализация строки. Как она устроена внутри никому не известно.
Это все - строки.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
01.11.2019, 12:46
Цитата Сообщение от pcmax Посмотреть сообщение
Что такое std::string
C++
1
typedef basic_string<char> string;
21.3 String classes
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
01.11.2019, 13:06
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

В учебниках и конкретика есть:
Цитата Сообщение от Stroustrup
We call such a zero-terminated array of characters a C-style string. All string literals are C-style strings.
http://stroustrup.com/PPP2_Ch18.pdf
[18.6], страница 655
Имена классов в поясняющем тексте типографски выделены: vector, string и т.п.
А в русском тексте слова "string" и "строка" и без выделения не перепутаешь.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2019, 13:06
Помогаю со студенческими работами здесь

что такое 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 )


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru