Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Методы std::string

9.4K
20 января 2008 года
1_Aposym_1
68 / / 01.11.2007
Подскажите как можно взять символ в строке, получить позицию буквы(символа).
505
20 января 2008 года
vAC
343 / / 28.02.2006
Не совсем конечно понятно, что вы хотите. Может вам нужно это:
 
Код:
std::cout << std::string("hello, world!").find('w');
9.4K
21 января 2008 года
1_Aposym_1
68 / / 01.11.2007
ООООО это мне тоже нужно.
Пример с чаром:

char *str="abcd";
std::cout << str[1]
Выводит b

Тоесть указать позицыю символа в строке и получить его
505
21 января 2008 года
vAC
343 / / 28.02.2006
 
Код:
std::cout << std::string("abcd")[1];
9.4K
21 января 2008 года
1_Aposym_1
68 / / 01.11.2007
vAC Подскажи есть какие ни будь строковые классы типа AnsiString? std::cout меня не сильно устраивает
240
21 января 2008 года
aks
2.5K / / 14.07.2006
Что значит типа AnsiString? Какой критерий "типости AnsiString"?
std::cout не имеет отношения к классам строк. Это объект потокового класса.
505
21 января 2008 года
vAC
343 / / 28.02.2006
не понятно, почему std::cout не сильно устраивает. Если хорошенько разобраться, то это более гибкий метод, чем использование того же printf. Другие строковые классы кроме string и wstring будет сложновато найти в STL. Под "типом AnsiString" наверно имеется ввиду, что строка представляется указателем на (const) char *. Если так, то у того же string есть метод c_str(),
возвращающий указатель на область памяти со строкой, разумеется const. Может проблема в том, что в программе есть методы, работающие именно с указателем а не с std::string, но эта проблема благополучно решается. В книге советов Майерса по эффективному использованию STL подобные вещи рассматриваются.
9.4K
21 января 2008 года
1_Aposym_1
68 / / 01.11.2007
Типа AnsiString это значит похожий на AnsiString. Просто я роботал в СБилдере и там я часто AnsiString использовал
505
21 января 2008 года
vAC
343 / / 28.02.2006
ну я уже и не помню, что есть в AnsiString, чего нет в той же std::string...но думаю что использование STL - будет гораздо удобнее
9.4K
23 января 2008 года
1_Aposym_1
68 / / 01.11.2007
У меня есть еще маленький вопрос, связанный с std::string.
Есть структура в ней есть std::string Name. Создаю динамический массив этой структуры
Выделяю память
Tobj=(TEMLER_ptr*)malloc(sizeof(TEMLER_ptr));
А потом Name заполняю чемто.
Tobj[0].Name=”cvbc”;
После компиляции запускаеться программа, а потом выдает ошибку.
Самое интересное если сделать через new то работает. Но мне надо через malloc.
Подскажи как устранить такую ошибку.
Насщет STL надо взяться как то, думаю хорошая штука
240
23 января 2008 года
aks
2.5K / / 14.07.2006
Цитата: 1_Aposym_1
У меня есть еще маленький вопрос, А потом Name заполняю чемто.
Tobj[0].Name=”cvbc”;


так ты не заполняешь, а присваиваешь указатель на константный строковый литерал ”cvbc”. Что плохо и опасно. Если хочешь так копировать тогда уж strcpy.

А раз уж ты исспользуешь C++ то и пиши C++, а не на С.

 
Код:
obj = new TEMLER_ptr;
...
delete obj;
9.4K
23 января 2008 года
1_Aposym_1
68 / / 01.11.2007
Ask кроме того что просто выделить память, мне надо ее динамически изменять для этого я пользуюсь realloc. Через new динамически изменять память, я не знаю как. Через strcpy у меня что то не получается, можешь написать эту сточку.
255
23 января 2008 года
Dart Bobr
1.4K / / 09.04.2004
Цитата: 1_Aposym_1
Ask кроме того что просто выделить память, мне надо ее динамически изменять для этого я пользуюсь realloc. Через new динамически изменять память, я не знаю как. Через strcpy у меня что то не получается, можешь написать эту сточку.



Поиск по форуму! Тема не раз поднималась и обсуждалась!!

3
23 января 2008 года
Green
4.8K / / 20.01.2000
Цитата: aks
так ты не заполняешь, а присваиваешь указатель на константный строковый литерал ”cvbc”. Что плохо и опасно. Если хочешь так копировать тогда уж strcpy.


Нет, aks, ты не прав. Тебя, видимо, запутал malloc.
Автор говорил:

Цитата: 1_Aposym_1

Есть структура в ней есть std::string Name.

3
23 января 2008 года
Green
4.8K / / 20.01.2000
Цитата: 1_Aposym_1
Создаю динамический массив этой структуры
Выделяю память
Tobj=(TEMLER_ptr*)malloc(sizeof(TEMLER_ptr));
А потом Name заполняю чемто.
Tobj[0].Name=”cvbc”;


Что-то я здесь не вижу массива...

Цитата: 1_Aposym_1
После компиляции запускаеться программа, а потом выдает ошибку.
Самое интересное если сделать через new то работает.


Все правильно. Определись, чем new отличается от malloc.
Вот наглядный пример, что нельзя с классами работать через malloc.

Цитата: 1_Aposym_1

Но мне надо через malloc.


Зачем?!
Все равно придется эмулировать new[], т.е. попросту самому писать код этого оператора.

Цитата: 1_Aposym_1

Подскажи как устранить такую ошибку.


Использовать new[], а лучше взять готовый контейнер, например, std::vector.

9.4K
23 января 2008 года
1_Aposym_1
68 / / 01.11.2007
Green вот массив Tobj[0]
Я читал что new лудше работает с классами, но и с malloc у мнея работало в себилдере прекрасноо токо там я использовал место std::string AnsiString (я так понимаю они очень похожи!).
Green насчет new я бы его с удовольствием использовал бы, но мне надо динамически увеличивать память.
3
23 января 2008 года
Green
4.8K / / 20.01.2000
Цитата: 1_Aposym_1
Green вот массив Tobj[0]


Это не массив, а разындексирование.
Tobj - массив из одного элемента?

Цитата: 1_Aposym_1

Я читал что new лудше работает с классами, но и с malloc у мнея работало в себилдере прекрасноо


Значит, ты не разобрался, чем new отличается от malloc.
Ликбез я устраивать не буду, постарайся сам разобраться, ну или спроси у др. участников форума.

Цитата: 1_Aposym_1

токо там я использовал место std::string AnsiString (я так понимаю они очень похожи!).


Понятия не имею, как AnsiString устроен внутри, а ведь вся проблема именно в реализации. А пользоваться классом с учетом реализации - противоречит принципам ООП и приводит к ошибкам подобным тем, с которой ты столкнулся.

Цитата: 1_Aposym_1

Green насчет new я бы его с удовольствием использовал бы, но мне надо динамически увеличивать память.


Ну так и с помощью new можно увеличивать память.
Только проще и удобнее использовать готовые контейнеры, чем городить свои. Используй STL, если уж начал. :)

9.4K
23 января 2008 года
1_Aposym_1
68 / / 01.11.2007
Ясно будем изучать STL
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог