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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> char -> string 
:(
    Опции темы
BIV
Дата 30.10.2010, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем доброе время суток!
Подскажите как перегнать строку в массив символов. Вот мои попытки вспомнить:

Код

    string user="Администратор";
    char* qwe1;
    int i=0;
    for(i=0;user[i]!=0;i++){};
    qwe1[]=new char[i];
    for(int j=0;user[j]!=0;j++)qwe1[j]=user[j];


Логически вроде вспомнил правильно, но компилятор ругается. Что не так?
PM MAIL   Вверх
Crafty
Дата 30.10.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В 5 строке должно быть вот так 
Код

qwe1=new char[i];


Добавлено через 4 минуты и 29 секунд
Я бы так сделал 
Код

    string user="Администратор";
    char* qwe1;
    qwe1=new char[user.size()+1];
    strcpy (qwe1, user.c_str());

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


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(BIV @ 30.10.2010,  17:40)
Всем доброе время суток!
Подскажите как перегнать строку в массив символов. Вот мои попытки вспомнить:

Код

    string user="Администратор";
    char* qwe1;
    int i=0;
    for(i=0;user[i]!=0;i++){};
    qwe1[]=new char[i];
    for(int j=0;user[j]!=0;j++)qwe1[j]=user[j];


Логически вроде вспомнил правильно, но компилятор ругается. Что не так?

скажите, а зачем создавать копию строки в виде массива чаров? почему бы не использовать метод c_str() ?

Это сообщение отредактировал(а) boostcoder - 30.10.2010, 18:52
PM WWW   Вверх
JЕT
Дата 30.10.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм, в названии темы написано 
Цитата

char -> string


А Вы делаете string -> char

Надо бы поправить тогда.

Тв. Crafty дал верный ответ, но все же я предпочитаю не использовал функции типа strcpy(), ну разве что если без них уже совсем никак(ну это мое мнение, я его никому не навязываю).

Я написал бы так:

Код

    string userName = "Administrator";
    unsigned int stringLength = userName.length();
    char *charUserName = new char[ stringLength ];

    for( int i = 0; i < stringLength; i++ ) {
    charUserName[ i ] = userName[ i ];
    }

    charUserName[ stringLength ] = '\0';



Это сообщение отредактировал(а) JЕT - 30.10.2010, 18:18
PM MAIL   Вверх
Crafty
Дата 30.10.2010, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Только нужно 
Код

char *charUserName = new char[ stringLength + 1 ];

PM MAIL   Вверх
SVN74
Дата 30.10.2010, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

string userName = "Administrator";
       char *charUserName = strdup(userName.c_str());
        printf("%s\n", charUserName);
       free(charUserName);


Это сообщение отредактировал(а) SVN74 - 1.11.2010, 15:58
PM MAIL WWW   Вверх
bsa
Дата 3.11.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(JЕT @  30.10.2010,  19:15 Найти цитируемый пост)
но все же я предпочитаю не использовал функции типа strcpy(), ну разве что если без них уже совсем никак(ну это мое мнение, я его никому не навязываю)
Твое решение в общем случае будет медленней работать, чем strcpy. Так как ты не используешь имеющиеся возможности процессора и не учитываешь его ограничения. Например, чтение одного байта занимает столько же времени, сколько и чтение выровненных 4-х байт. Именно поэтому, функции типа strcpy/memcpy имеют очень большой и сложный код.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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