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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разобраться с функцией, разбивка строки на символы 
V
    Опции темы
compiler91
  Дата 2.7.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день!
Помогите пожалуйста разобраться с функцией..  smile 
(функция инициализирует карту(map) из файла, где ключем становится первое слово в строке, а остальные слова строки, становятся значениями)
Код

/ * Essential C++ -- Stanley Lippman*/
void populate_map( ifstream &nameFile,
                   map<string,vstring> &families )
{
    string textline;
    while ( getline( nameFile, textline, '\n' ))
    {
        string fam_name;
        vector<string> child;
        cout << "textline: " << textline << endl;

        string::size_type pos = 0, prev_pos = 0,  /*кто такой size_type?*/
                          text_size = textline.size();

        if ( ! text_size )
             continue;

        // ok: find each word separated by a space
        while ((  pos = textline.find_first_of( ' ', pos )) 
                     != string::npos ) /*а что тут делает npos?*/
        {
            string::size_type end_pos = pos-prev_pos;
            if ( ! prev_pos )
                 fam_name = textline.substr( prev_pos, end_pos  );
            else child.push_back(textline.substr(prev_pos,end_pos));
            prev_pos = ++pos;
        }
     
        // now handle last child
        if ( prev_pos < text_size )
             child.push_back(textline.substr(prev_pos,pos-prev_pos)); 

        cout << "family name: " << fam_name
             << " children: "   << child.size() << endl;

        if ( ! families.count( fam_name ))
             families[ fam_name ] = child;
        else cerr << "Oops! We already have a "
                  << fam_name << " family in our map!\n";
    }
}

заранее благодарен.
PM MAIL   Вверх
xvr
Дата 3.7.2008, 11:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



typedef basic_string<char> string;
Цитата

basic_string::size_type

An unsigned integer type that can represent the number of elements and indices in a string.

typedef implementation-defined size_type;

Remarks
It is equivalent to allocator_type::size_type.
For type string, it is equivalent to size_t.


Цитата

basic_string::npos

An unsigned integral value initialized to –1 that indicates either "not found" or "all remaining characters" when a search function fails.

static const size_type npos = -1;

Remarks
When the return value is to be checked for the npos value, it might not work unless the return value is of type size_type and not either int or unsigned.

RTFM MSDN  smile 

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


Шустрый
*


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

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



Хорошо.. Чем size_type лучше int?

PM MAIL   Вверх
jonie
Дата 3.7.2008, 15:42 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



это разные типы потому что. посмотрите в их определеения. на одной машине size_type может быть int, а на другой какой-нибудь __int64 


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
compiler91
Дата 3.7.2008, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
это разные типы потому что. посмотрите в их определеения. на одной машине size_type может быть int, а на другой какой-нибудь __int64
то есть я могу спокойно заменять  в исходниках size_type на  int?
PM MAIL   Вверх
JackYF
Дата 3.7.2008, 17:10 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Цитата(compiler91 @  3.7.2008,  14:58 Найти цитируемый пост)
то есть я могу спокойно заменять  в исходниках size_type на  int? 

За это ты заплатишь непортабельностью твоей программы на другие архитектуры. Скажем, при переходе на 64-битные процессоры хотя бы.

Чем тебе size_type не угодил?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
compiler91
Дата 3.7.2008, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Чем тебе size_type не угодил? 
я просто не могу понять его сущность и предназначение  smile 
PM MAIL   Вверх
jonie
Дата 3.7.2008, 18:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
compiler91
Дата 3.7.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

как уже говорилось суть и назначение : возможность использования твоего кода на разных платформах (и даже реализациях STL) без (ну почти всегда) проблем при переносе. но типы, повторюсь разные. typedef не есть define. он опредялет новый тип, посему лучше его имхо и использовать, где это уместно.
То есть size_type  это целочисленный  тип неизвестных размеров? А зачем тогда он привязывается к базовому типу? Или при разных базовых типах он может принимать разные типы на одной и той же платформе?
PM MAIL   Вверх
JackYF
Дата 3.7.2008, 20:02 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Цитата(compiler91 @  3.7.2008,  17:54 Найти цитируемый пост)
А зачем тогда он привязывается к базовому типу?

Что ты этим хотел сказать? Понимаешь, что такое typedef?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
compiler91
Дата 3.7.2008, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



typedef, создает синоним для имени типа, а define - это макрос меняющий исходник до процесса компиляции, так?
PM MAIL   Вверх
JackYF
Дата 4.7.2008, 00:34 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



compiler91, верно. Так что тебя всё-таки смущает?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
compiler91
Дата 4.7.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата
Так что тебя всё-таки смущает?
 если size_type это один из typedef-ов, то почему он объявляется так: string::size_type, какое отношение он имеет к string? Или он  прописывается там?
 smile 
PM MAIL   Вверх
JackYF
Дата 4.7.2008, 13:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


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

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



Цитата(compiler91 @  4.7.2008,  10:48 Найти цитируемый пост)
какое отношение он имеет к string?

Самое прямое. У разных классов могут быть разные типы: string::size_type и vector::size_type могут быть разными типами.

Цитата(compiler91 @  4.7.2008,  10:48 Найти цитируемый пост)
Или он  прописывается там?

Можно и так сказать.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
compiler91
Дата 4.7.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вроде разобрался.. Всем ОГРОМНОЕ спасибо...

---
просьба поднять репутацию..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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