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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> string2int 
:(
    Опции темы
box
Дата 10.4.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как преобразовать из string в int ? делаю так :
Код

.................
const vector<string> line( split( setting, "|" ) );
int stop, stop1;
    sprintf( stop, "%d", line[0] );
    sprintf( stop1, "%d", line[1] );

но так не работает .
--------------------------
вопрос решен так:
Код

#include <sstream>
using namespace std;

int integer(const string& s)
{
istringstream buf(s);
int a;
buf >> a;
return a;
}


Это сообщение отредактировал(а) box - 10.4.2011, 21:02
PM MAIL   Вверх
bsa
Дата 11.4.2011, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



box, более красивое решение:
Код
template<typename T>
T string_cast<T>(const std::string &s)
{
   std::istringstream stream(s);
   T ret;
   if ((stream >> ret).fail())
      throw std::bad_cast("Bad cast from string");
   return ret;
}

...
double d = string_cast<double>(str);
...
int i = string_cast<int>(str);
...


Это сообщение отредактировал(а) bsa - 11.4.2011, 10:03
PM   Вверх
xvr
Дата 11.4.2011, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(box @  10.4.2011,  20:45 Найти цитируемый пост)
как преобразовать из string в int ? делаю так :
Код

const vector<string> line( split( setting, "|" ) );
int stop, stop1;
    sprintf( stop, "%d", line[0] );
    sprintf( stop1, "%d", line[1] );

но так не работает .
Забыли сказать 'Крибле Крабле Бумс' и полить монитор и системный блок святой водой  smile 
Описание функции sprintf не пытались почитать? Оно не является великой тайной, и доступно не только полным адептам С++ 10го уровня  smile Она делает прямо противоположное тому, что вам надо  smile 


PM MAIL   Вверх
borisbn
Дата 11.4.2011, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



 smile 
xvr, какой-то день интересный: то один пишет поератор '<<' для чтения из файла, то другой sprintf для преобразования из строки в число  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
leniviy
Дата 12.4.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



это всё ненадёжно. integer("123garbage") вернёт 123, и вы даже не узнаете, что была ошибка.
Надо так:
Код

/* check strtol()/strtod() result */
static int strtox_check(char *nptr, char *endptr) {
    char dummys[2];
    /* Check for various possible errors */

    /* if ((errno == ERANGE && (*n == LONG_MAX || *n == LONG_MIN))
           || (errno != 0 && *n == 0)) { */
    if (errno != 0) {
        /*pdebug8("strtol(): failed\n");*/
        return errno;
    }

    /*pdebug8("strtol(): nptr: '%s', endptr: '%s'\n", nptr, endptr);*/

    if (nptr == endptr) {
        /*pdebug8("strtol(): No digits were found\n");*/
        return -1;
    }

    /* If we got here, strtol() successfully parsed a number */

    if (*endptr != '\0' && *endptr != '\n' && sscanf(endptr, "%1s", dummys)>0) {
        /*pdebug8("strtol(): Further characters after number: %s\n", endptr);*/
        return -1;
    }

    return 0;
}

int main() {
    char *endptr;
    char str[] = "123garbage";
    long l = strtol(str, &endptr, 10);
    if (0 != strtox_check(str, endptr)) {
        printf("bad number: '%s'\n", str);
        return 1;
    }
}



Это сообщение отредактировал(а) leniviy - 12.4.2011, 13:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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