Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> конец строки 
:(
    Опции темы
skrip
Дата 8.8.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



какой символ определяет конец строки

    std::string st;
    st[0]='x';
    st[2]='y';
    st[1]='z';
    st[3]='\0';
     

std::cout << st; выводит пустую строку;
std::cout << st[0] выведит 'x', аналогично st[1] и st[2].

Это сообщение отредактировал(а) skrip - 8.8.2006, 10:30
PM MAIL   Вверх
Romikgy
Дата 8.8.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



st="xyz";
так нельзя?



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
skrip
Дата 8.8.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



нужно именно посимвольно как я написал smile 
PM MAIL   Вверх
Romikgy
Дата 8.8.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



тогда имхо сначало надо выделить память под переменную может это юзать
str.resize(4);
а уж потом посимвольно

Добавлено @ 11:52 
Код

std::string st;
st.resize(4);    
st[0]='x';    
st[2]='y';    
st[1]='z';    
st[3]='\0';     
std::cout << st; 
std::cout << st[0]; 

У меня работает


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Mayk
Дата 8.8.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Ну или
string st;
st.push_back('1');
st.push_back('2');
st.push_back('3');
и не хай с++ сам длину строки высчитывает.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
MAKCim
Дата 8.8.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



ну или
Код

string st;
st+='x';
st+='y';
...

 smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
skrip
Дата 8.8.2006, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



всем спасибо
я придумал нижний способ
просто хотел узнать символ конца строки string

Это сообщение отредактировал(а) skrip - 8.8.2006, 17:20
PM MAIL   Вверх
Romikgy
Дата 8.8.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Цитата(skrip @  8.8.2006,  16:16 Найти цитируемый пост)
просто хотел узнать символ конца строки string

0


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
skrip
Дата 9.8.2006, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



ну а тогда почему вот это не работает?

   std::string st;
    st[0]='x';
    st[2]='y';
    st[1]='z';
    st[3]='\0';

оператор << значит подругому определяет конец строки string
PM MAIL   Вверх
Daevaorn
Дата 9.8.2006, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(skrip @  9.8.2006,  08:11 Найти цитируемый пост)
ну а тогда почему вот это не работает?

тебе уже здесь сказали что надо добавить st.resize(4);
PM MAIL WWW   Вверх
Romikgy
Дата 9.8.2006, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Цитата(skrip @  9.8.2006,  06:11 Найти цитируемый пост)
 std::string st;

потому что в этой строке указывается что будет переменая типа стринг но нулевой длины, и сам понимаешь что будет при передаче данных в неинициализированый массив данных
PS тип стринг это динамическая строка, в простейшем случае типа char 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MAKCim
Дата 9.8.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

PS тип стринг это динамическая строка, в простейшем случае типа char  

Код

typedef std::basic_string<char> std::string;

так что std::string - это и есть частный случай


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bel_nikita
Дата 9.8.2006, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата(skrip @ 8.8.2006,  09:21)
какой символ определяет конец строки

    std::string st;
    st[0]='x';
    st[2]='y';
    st[1]='z';
    st[3]='\0';
     

std::cout << st; выводит пустую строку;
std::cout << st[0] выведит 'x', аналогично st[1] и st[2].

не совсем рабочий пример smile 
как указали выше нужен ресайз. оператор [] возвращает адрес и не более того, присваивание в этом случае не влечет за собой изменение каких-либо переменных в std::string. поэтому в данном случае нужен след. вывод:
Код

std::cout << str.c_str(); // выводит строку;



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Daevaorn
Дата 9.8.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(bel_nikita @  9.8.2006,  13:52 Найти цитируемый пост)
оператор [] возвращает адрес и не более того

Он возвращает ссылку, а это уже о-го-го более того, и что самое интересное этого достаточноsmile

Цитата(bel_nikita @  9.8.2006,  13:52 Найти цитируемый пост)
std::cout << str.c_str(); // выводит строку;

В идеале и этот код и все предыдущие должны работать идентично.
PM MAIL WWW   Вверх
bel_nikita
Дата 9.8.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Цитата(Daevaorn @ 9.8.2006,  12:51)
Цитата(bel_nikita @  9.8.2006,  13:52 Найти цитируемый пост)
std::cout << str.c_str(); // выводит строку;

В идеале и этот код и все предыдущие должны работать идентично.

В идеале, для st[0]='x'; st[2]='y'; st[1]='z'; st[3]='\0'; нужно пользовать vector smile  Только реализация std::vector гарантирует (&v[0] + 5) == &v[5]
И где сказано, что данные в std::string обязаны оканчиваться "\0" и располагаться последовательно? А вот, как раз str.c_str() и возвращает Си-строку, которая заканчивается на "\0". А то, что не срабатывает std::cout << st; - лишь тому доказательство smile 



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1091 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.