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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна замена для std::string, Нужна замена для std::string 
V
    Опции темы
andrew_121
Дата 15.6.2008, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Нужна замена для std::string.
Работаю над программой, с приогромнейшим кол-вом строковых операций.
Юзать "algorithm"-ы терпения не хватает.
Кто нибудь, если есть сей класс, поделитесь, ну хоть ссылочкой.
Спасибо.

Это сообщение отредактировал(а) andrew_121 - 15.6.2008, 01:57


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
anatox91
Дата 15.6.2008, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



ну наваляй что-то типа такого:
Код

#include <iostream>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
class cstring {
      char *string;
      unsigned int len;
public:
       enum CaseSensitivity { CaseSensitive = 1, CaseInsensitive = 2 };
       cstring() {
                 len = 0;
                 string =0;
                  }
       cstring(const char *str){
                    len = strlength(str); 
                    string = new char[len + 1];
                    unsigned int i=0;
                    for(; str[i]; ++i) {
                            string[i] = str[i];
                            }
                    string[i] = '\0';
                    }
       cstring(const cstring &copy) {
                     len = copy.len;
                     string = new char[len + 1];
                     unsigned int k=0;
                     for(; copy.string[k]; ++k) {
                           string[k] = copy.string[k];
                           }
                     string[k] = '\0';
                     }
       ~cstring() {
                  if(!len) 
                  delete[] string;
                  }
       void show() const {
            for(unsigned int i=0; i < len; ++i) 
                         std::cout << string[i];       
            } 
       void clear() {
            len = 0;
            delete[] string;
            }
protected:
       static int strlength(const char *array) { 
           int length=0;
           for(int j=0; array[j]; ++j) length++;
           return length;
           }
public:
       int size() const { 
           return len;
           }
       bool isEmpty() const {
            return !len ? true : false;
            }
       char at(int i) const { 
            return len ? string[i] : 0 ;
            }
       friend std::ostream &operator<<(std::ostream& out, const cstring &obj) { 
              out << obj.string;
              return out;
              }
       friend std::istream &operator>>(std::istream& in, cstring &obj) {
              //std::string
              std::string s;
              in >> s;
              obj.len = s.size ();
              obj.string = new char[obj.len+1];
              strcpy (obj.string, s.c_str());
              return in;
              }
       cstring &operator=(const cstring &other) {
               if(len) delete[] string;
               len = other.len;
               string = new char[len + 1];
               unsigned int k=0;
               for(; other.string[k]; k++) {
                          string[k] = other.string[k];
                           }
               string[k] = '\0';
               return *this;
               }
       cstring &operator=(const char *str) {
               if(len) delete[] string;
               len = strlength(str); //my function for count string length
               string = new char[len + 1];
               unsigned int i=0;
               for(; str[i]; i++) {
                            string[i] = str[i];
                            }
               string[i] = '\0';
               return *this;
               }
       cstring &append(const char *str) {
               if(!len) {
                        len = strlength(str); //my function for count string length
                        string = new char[len + 1];
                        unsigned int i=0;
                        for(; i < len; i++) {
                              string[i] = str[i];
                              }
                        string[i] = '\0';
                        return *this;
                        }
               else {
                    len += strlength(str);
                    char *buf = new char[len+1]; //creating buffer for copy string
                    unsigned int k=0; //iterator
                    for(; string[k]; k++) buf[k] = string[k]; //copying string to buffer
                    
                    unsigned int c=0;
                    for(; k < len; k++, c++) { 
                          buf[k] = str[c];
                          }
                    buf[k] = '\0'; //add null
                    string = buf;
                    return *this; //return new object
                    }
               }
       cstring &append(const cstring &other) {
               if(other.len) {
                             this->append(other.string);
                             return *this;
                             }
               }
       cstring &append(char ch) {
               if(!len) {
                        len = 1;
                        string = new char[2];
                        string[0] = ch;
                        string[1] = '\0';
                        return *this;
                        }
               else {
                    ++len;
                    char *buf = new char[len+1]; //creating buffer for copy string
                    unsigned int k=0; //iterator
                    for(; string[k]; k++) buf[k] = string[k]; //copying string to buffer
                    
                    delete[] string; //deleting old string
                    
                    buf[k] = ch;
                    buf[++k] = '\0';
                    string = buf;
                    return *this;
                    }
               }
       bool compare(const cstring &other) const {
            if(len != other.len) return false;
            for(unsigned int i=0; i < len; i++) {
                    if(string[i] != other.string[i]) return false;
                    }
            return true;
            }
       bool compare(const char* str) const {
            if(len != strlength(str)) return false;
            for(unsigned int i=0; i < len; i++) {
                         if(string[i] != str[i]) return false;
                         }
            return true;
            }
       bool compare(const char *str, CaseSensitivity cs) const {
            if(cs == CaseInsensitive) {
                  if(len != strlength(str)) return false;
                  for(unsigned int i=0; i < len; i++) {
                               if(tolower(string[i]) != tolower(str[i])) return false;
                               }
                  return true;
                  }
            else {
                 if(len != strlength(str)) return false;
                 for(unsigned int i=0; i < len; i++) {
                         if(string[i] != str[i]) return false;
                         }
                 return true;
                 }
            }
       bool compare(const cstring &other, CaseSensitivity cs) const {
            if(cs == CaseInsensitive) {
                  if(len != other.len) return false;
                  for(unsigned int i=0; i < len; i++) {
                               if(tolower(string[i]) != tolower(other.string[i])) return false;
                               }
                  return true;
                  }
            else {
                 if(len != other.len) return false;
                 for(unsigned int i=0; i < len; i++) {
                    if(string[i] != other.string[i]) return false;
                    }
                 return true;
                 }
            }
       bool operator==(const cstring &other) const {
            return (this->compare(other));
            }
       bool operator==(const char *str) const {
            return (this->compare(str));
            }
       bool contains(char ch) const {
            for(size_t i=0; i < len; i++) {
                       if(string[i] == ch) return true;
                       }
            return false;
            }             
       bool operator!=(const cstring &other) const {
            return (!this->compare(other));
            }
       bool operator!=(const char *str) const {
            return (!this->compare(str));
            }
       cstring &operator+=(const char *str) {
               if(strlength(str)) {
                                  this->append(str);
                                  return *this;
                                  }
               }
       cstring &operator+=(const cstring& other) {
               if(other.len) {
                             this->append(other.string);
                             return *this;
                             }
               }
       cstring &operator+=(char ch) {
               if(ch) {
                      this->append(ch);
                      return *this;
                      }
               }
       bool operator<(const char *str) const {
            return (len < strlength(str));
            } 
       bool operator<(const cstring &other) const {
            return (len < other.len);
            } 
       bool operator<=(const char *str) const {
            return (len <= strlength(str));
            } 
       bool operator<=(const cstring &other) const {
            return (len <= other.len);
            }
       bool operator>(const char *str) const {
            return (len > strlength(str));
            }
       bool operator>(const cstring& other) const {
            return (len > other.len) ;
            }
       bool operator>=(const char *str) const {
            return (len >= strlength(str));
            }
       bool operator>=(const cstring& other) const {
            return (len >= other.len);
            }
       cstring operator+(const cstring &s2) {
               this->append(s2);
               return *this;
               }
       cstring operator+(const char *str) {
               this->append(str);
               return *this;
               }
       friend cstring operator+(const char *str, const cstring &other) {
               cstring s;
               s.append(str).append(other);
               return s;
               }
       cstring operator+(char ch) {
             this->append(ch);
             return *this;
             }
       friend cstring operator+(char ch, const cstring &other) {
              cstring s;
              s.append(ch).append(other);
              return s;
              }  
};

 smile 

блин, че-то [code=cpp] не работает или это у меня только такие глюки?

Это сообщение отредактировал(а) anatox91 - 15.6.2008, 09:47


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
bronislav
Дата 15.6.2008, 09:26 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А чем тебя не устраивает std::string?




--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
andrew_121
Дата 15.6.2008, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



anatox91 - Думал что я не один такой, кого std::string неустраивает. Да, похоже придется ваять нечто STL совместимое.

Добавлено через 1 минуту и 8 секунд
bronislav - Да функционал никакой! Вот QString - это тема!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
yar
Дата 15.6.2008, 10:23 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



std::string можно использовать с Boost String Algorithms Library.. 
Там много дополнительного функционала, не включённого в STL.

--------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг
PM MAIL WWW   Вверх
anatox91
Дата 15.6.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



Цитата(andrew_121 @  15.6.2008,  10:07 Найти цитируемый пост)
Вот QString - это тема!

насчет этого согласен  smile 


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Lazin
Дата 15.6.2008, 11:43 (ссылка)  | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(andrew_121 @  15.6.2008,  10:07 Найти цитируемый пост)
Да функционал никакой! Вот QString - это тема! 

QString это BLOB(антипаттерн)
алгоритмы + boost и QString нервно курит в сторонке, string конечно то-же огромен, но там практичесски нет функционала для обработки строк, это предпологается делать средствами STL, которые пора-бы уже и знать smile  
к тому-же QString только Unicode, иногда нужен ASCII
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 15.6.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Lazin
Цитата

QString это BLOB(антипаттерн)

Согласен. Зато функционал какой !!!
Цитата

это предпологается делать средствами STL, которые пора-бы уже и знать

Да влом постояно алгоритмы тягать, писанины много!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Mayk
Дата 15.6.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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




Цитата(Lazin @  15.6.2008,  15:43 Найти цитируемый пост)
ASCII 

user posted imageuser posted imageuser posted image
Цитата(Lazin @  15.6.2008,  15:43 Найти цитируемый пост)

алгоритмы + boost и QString нервно курит в сторонке,

 smile 


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


Бывалый
*


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

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



andrew_121, может сделать класс производный от std::string и добавить методы использующие алгоритмы?
PM MAIL   Вверх
andrew_121
Дата 15.6.2008, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(georain @ 15.6.2008,  15:16)
andrew_121, может сделать класс производный от std::string и добавить методы использующие алгоритмы?

Да, походу так и придется делать.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 15.6.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



ASCII иногда приходится использовать для поддержки старых интерфейсов, я сейчас работаю над проектом, в котором используется ascii, так как объемы обробатываемого текста оч. большие, а все программы, которые со мной взаимодействуют юникод не понимают и им все-равно приходится отдавать в cp_1251 smile 

Цитата(Mayk @  15.6.2008,  11:54 Найти цитируемый пост)
 smile 

стандартные алгоритмы работают с string - find replace for_each... etc
всякие split join trim итд есть в boost

QString не каждый может себе позволить использовать.. так-что лучше использовать то-что стандартно smile 
PM MAIL Skype GTalk   Вверх
bsa
Дата 15.6.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(georain @ 15.6.2008,  15:16)
andrew_121, может сделать класс производный от std::string и добавить методы использующие алгоритмы?

Зачем? Чем сторонняя функция хуже метода?
И вообще, есть правило, если имеющегося публичного интерфейса класса достаточно для реализации задачи с помощью внешней функции, то именно так и надо делать.
Класс стринг (да, да, именно std::string) вообще считается перегруженным. Большинство встроенных методов там просто не нужны. Чего только стоит наличие двух интерфейсов - под итераторы и под индексы.
PM   Вверх
andrew_121
Дата 15.6.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



bsa - Как-то влом ипользовать алгоритмы. Проще(мне так кажется), все необходимое впихнуть в класс.
Цитата

Класс стринг (да, да, именно std::string) вообще считается перегруженным.

Так от какого наследовать чтоб разные компилеры не ругались?
Ну придется, сей хедер с проектом тягать, ну и ладно.
Нашел я в инете пару классов замещающих "std::string", ток они староваты, и MSVC-2008 и MinGW32, жутко ругаются на них.
Вот, гляжу, пытаюсь понять.
Кстати, вот они. "basic_string" - вроди замена стантартной.

Это сообщение отредактировал(а) andrew_121 - 15.6.2008, 20:11

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  basic_string.rar 80,89 Kb


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 15.6.2008, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



andrew_121 ну так запихай... наследование никто не отменял.
наследуйся от того что определишь в рантайме)
нечто вроде class WMyString::public wstring{};

как вариант примени агрегирование и вынеси то что тебе надо "наружу"


вы учитете, что используя нечто "стороннее" есть шанс искать чужие баги..

Это сообщение отредактировал(а) jonie - 15.6.2008, 20:03


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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



почему алгоритм это плохо..? в классе string и так около сотни методов, вам мало? smile 
PM MAIL Skype GTalk   Вверх
Alek86
Дата 16.6.2008, 12:06 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(andrew_121 @  15.6.2008,  19:57 Найти цитируемый пост)
Проще(мне так кажется), все необходимое впихнуть в класс.

отакие вот создали MFC... smile

и, как я понял, в сторону Boost String Algorithms Library ты даже не посмотрел
тогда уж пользуй QString


--------------------
user posted image    user posted image
PM MAIL   Вверх
andrew_121
Дата 16.6.2008, 12:27 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Lazin - гм... Я их там не больше 10-ти насчитал.

Добавлено через 2 минуты и 8 секунд
Alek86 - Именно в сторону Boost String Algorithms я и смотрю.
Но вот незадача, мне нужен класс в одном-двух хедерах, а вот Boost тягать с собой совсем неохота!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 16.6.2008, 12:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



andrew_121, конструкторы, операторы и все варианты их перегрузки smile 
PM MAIL Skype GTalk   Вверх
Alek86
Дата 16.6.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(andrew_121 @  16.6.2008,  12:27 Найти цитируемый пост)
мне нужен класс в одном-двух хедерах

зря
таких монстров в 1 хедере хранить - плохая затея

Цитата(andrew_121 @  16.6.2008,  12:27 Найти цитируемый пост)
вот Boost тягать с собой совсем неохота!

у буста есть утилитка, с помощью котрой можно "вытаскивать" из него определенные библиотеки с их зависимостями

Цитата(andrew_121 @  16.6.2008,  12:27 Найти цитируемый пост)
гм... Я их там не больше 10-ти насчитал.

плохо считал, что тут скажешь
только в стандарте их "туева хуча", а в реализациях и поболя


--------------------
user posted image    user posted image
PM MAIL   Вверх
andrew_121
Дата 16.6.2008, 14:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Alek86 - Я их насчитал 35.
Но не в этом дело. Все равно, функционал некакущий !!!

Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 14:51


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Mayk
Дата 16.6.2008, 14:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



35? буга.
Чисто для справки перечень ф-ций из драфта.  И это только члены класса std::string'а. Про операторы молчу

21.3 @ c++-draft-nov2006-n2135.txt

Код

           explicit basic_string(const Allocator& a = Allocator());
           basic_string(const basic_string& str );
           basic_string(const basic_string& str , size_type pos , size_type n = npos, const Allocator& a = Allocator());
           basic_string(const charT* s , size_type n , const Allocator& a = Allocator());
           basic_string(const charT* s , const Allocator& a = Allocator());
           basic_string(size_type n , charT c , const Allocator& a = Allocator());
           template<class InputIterator> basic_string(InputIterator begin , InputIterator end ,  const Allocator& a = Allocator());
          ~basic_string();
           basic_string& operator=(const basic_string& str );
           basic_string& operator=(const charT* s );
           basic_string& operator=(charT c );
           iterator               begin();
           const_iterator         begin() const;
           iterator               end();
           const_iterator         end() const;
     reverse_iterator         rbegin();
     const_reverse_iterator   rbegin() const;
     reverse_iterator         rend();
     const_reverse_iterator   rend() const;
     const_iterator           cbegin() const;
     const_iterator           cend() const;
     const_reverse_iterator   crbegin() const;
     const_reverse_iterator   crend() const;
     size_type size() const;
     size_type length() const;
     size_type max_size() const;
     void resize(size_type n , charT c );
     void resize(size_type n );
     size_type capacity() const;
     void reserve(size_type res_arg = 0);
     void clear();
     bool empty() const;
     const_reference operator[](size_type pos ) const;
     reference            operator[](size_type pos );
     const_reference at(size_type n) const;
     reference            at(size_type n);
     basic_string& operator+=(const basic_string& str );
     basic_string& operator+=(const charT* s );
     basic_string& operator+=(charT c );
     basic_string& append(const basic_string& str );
     basic_string& append(const basic_string& str , size_type pos ,                           size_type n );
     basic_string& append(const charT* s , size_type n );
     basic_string& append(const charT* s );
     basic_string& append(size_type n , charT c );
     template<class InputIterator>        basic_string& append(InputIterator first , InputIterator last );
     void push_back(charT c );
     basic_string& assign(const basic_string& str );
     basic_string& assign(const basic_string& str , size_type pos ,                          size_type n );
     basic_string& assign(const charT* s , size_type n );
     basic_string& assign(const charT* s );
     basic_string& assign(size_type n , charT c );
     template<class InputIterator>      basic_string& assign(InputIterator first , InputIterator last );
      basic_string& insert(size_type pos1 , const basic_string& str );
      basic_string& insert(size_type pos1 , const basic_string& str ,                           size_type pos2 , size_type n );
      basic_string& insert(size_type pos , const charT* s , size_type n );
      basic_string& insert(size_type pos , const charT* s );
      basic_string& insert(size_type pos , size_type n , charT c );
      iterator insert(iterator p , charT c );
      void     insert(iterator p , size_type n , charT c );
      template<class InputIterator>        void insert(iterator p , InputIterator first , InputIterator last );
      basic_string& erase(size_type pos = 0, size_type n = npos);
      iterator erase(iterator position );
      iterator erase(iterator first , iterator last );
      basic_string& replace(size_type pos1 , size_type n1 ,                            const basic_string& str );
      basic_string& replace(size_type pos1 , size_type n1 ,                            const basic_string& str ,                            size_type pos2 , size_type n2 );
      basic_string& replace(size_type pos , size_type n1 , const charT* s ,                            size_type n2 );
      basic_string& replace(size_type pos , size_type n1 , const charT* s );
      basic_string& replace(size_type pos , size_type n1 , size_type n2,                            charT c );
      basic_string& replace(iterator i1 , iterator i2 ,                            const basic_string& str );
      basic_string& replace(iterator i1 , iterator i2 , const charT* s ,                            size_type n );
      basic_string& replace(iterator i1 , iterator i2 , const charT* s );
      basic_string& replace(iterator i1 , iterator i2 ,                            size_type n , charT c );
      template<class InputIterator>        basic_string& replace(iterator i1 , iterator i2 ,                              InputIterator j1 , InputIterator j2 );
      size_type copy(charT* s , size_type n , size_type pos = 0) const;
      void swap(basic_string& str );
      const charT* c_str() const;
      const charT* data() const;
      allocator_type get_allocator() const;
      size_type   find   (const   basic_string& str , size_type pos = 0) const;
      size_type   find   (const   charT* s , size_type pos , size_type n ) const;
      size_type   find   (const   charT* s , size_type pos = 0) const;
      size_type   find   (charT   c , size_type pos = 0) const;
      size_type   rfind(const   basic_string& str , size_type pos = npos) const;
      size_type   rfind(const   charT* s , size_type pos , size_type n ) const;
      size_type   rfind(const   charT* s , size_type pos = npos) const;
      size_type   rfind(charT   c , size_type pos = npos) const;
      size_type find_first_of(const basic_string& str ,                              size_type pos = 0) const;
      size_type find_first_of(const charT* s ,                              size_type pos , size_type n ) const;
      size_type find_first_of(const charT* s , size_type pos = 0) const;
      size_type find_first_of(charT c , size_type pos = 0) const;
      size_type find_last_of (const basic_string& str ,                              size_type pos = npos) const;
      size_type find_last_of (const charT* s ,                              size_type pos , size_type n ) const;
      size_type find_last_of (const charT* s , size_type pos = npos) const;
      size_type find_last_of (charT c , size_type pos = npos) const;
      size_type find_first_not_of(const basic_string& str ,                                  size_type pos = 0) const;
      size_type find_first_not_of(const charT* s , size_type pos ,                                  size_type n ) const;
      size_type find_first_not_of(const charT* s , size_type pos = 0) const;
      size_type find_first_not_of(charT c , size_type pos = 0) const;
      size_type find_last_not_of (const basic_string& str ,                                  size_type pos = npos) const;
      size_type find_last_not_of (const charT* s , size_type pos ,                                  size_type n ) const;
      size_type find_last_not_of (const charT* s ,                                  size_type pos = npos) const;
      size_type find_last_not_of (charT c , size_type pos = npos) const;
       basic_string substr(size_type pos = 0, size_type n = npos) const;
       int compare(const basic_string& str ) const;
       int compare(size_type pos1 , size_type n1 ,                   const basic_string& str ) const;
       int compare(size_type pos1 , size_type n1 ,                   const basic_string& str ,                   size_type pos2 , size_type n2 ) const;
       int compare(const charT* s) const;
       int compare(size_type pos1 , size_type n1 ,                   const charT* s ) const;
       int compare(size_type pos1 , size_type n1 ,                   const charT* s , size_type n2 ) const;


Цитата(Lazin @  16.6.2008,  00:46 Найти цитируемый пост)
в классе string и так около сотни методов, вам мало? 

причем около сотни следует читать лишь как "больше сотни".  smile  smile  smile 

Это сообщение отредактировал(а) Mayk - 16.6.2008, 15:00


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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(andrew_121 @  16.6.2008,  14:43 Найти цитируемый пост)
Но не в этом дело. Все равно, функционал некакущий !!!

а какой нужен функционал?
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 16.6.2008, 15:22 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Mayk - Я имел ввиду, поименно. Ну а если посчитать ВСЕ, то ДА, огого...
Повторюсь: Все равно, функционал некакущий !!!
Не регулярных выражений, ни сдвигов...т.е. МАЛОВАТО !!!
Блин, ну поймите - проект, с приогромнейшим кол-вом строковых операций.

Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 16:26


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 16.6.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(andrew_121 @  16.6.2008,  15:22 Найти цитируемый пост)
Не регулярных выражений

ты уж меня извини, но гда ты видел рег. выражения в строковом классе. а если я их в программе не использую? В общем почитай про антипатерн blob.
Пс
есть boost::regex
есть boost::xpression, что то подобное есть в QString? Или в каком нибудь другом строковом классе...

Цитата(andrew_121 @  16.6.2008,  15:22 Найти цитируемый пост)
сдвигов

вставить нужное количество пробелов не судьба?

Цитата(andrew_121 @  16.6.2008,  12:27 Найти цитируемый пост)
Но вот незадача, мне нужен класс в одном-двух хедерах, а вот Boost тягать с собой совсем неохота! 

ну, QString вообще-то не бывает без Qt.. проблема-то в чем? Штука в том, что string и алгоритмы - header only, что очень сильно тебе упрощает задачу, а ты сопротивляешься этому smile
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 16.6.2008, 17:01 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Понял. Нужно писать свой класс. Унаследоваться от std::string, впихнуть в него все что нужно.
Alek86
Цитата(Alek86 @  16.6.2008,  12:40 Найти цитируемый пост)
у буста есть утилитка, с помощью котрой можно "вытаскивать" из него определенные библиотеки с их зависимостями

А чё за зверь? Как звать? И много за собой тянет?

Думал тему закрыть, но нет, Буду сюда писать вопросы по реализации сего класса.

Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 17:04


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 16.6.2008, 17:07 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(andrew_121 @ 16.6.2008,  17:01)
Понял. Нужно писать свой класс. Унаследоваться от std::string, впихнуть в него все что нужно.

smile
Ты ничего не понял. Ну ничего, скоро поймешь.
Кстати, было на баше как-то про админов: админы делятся на два типа: тех, которые уже делают бекапы, и тех, которые еще не делают. Выводы сделай сам.
PM   Вверх
JackYF
Дата 16.6.2008, 17:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(andrew_121 @  16.6.2008,  16:01 Найти цитируемый пост)
Буду сюда писать вопросы по реализации сего класса.

За тебя уже всё реализовано, что ты собираешься реализовывать?


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


Кодофей
****


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

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



bsa, JackYF - Вам смешно. А мне совсем не до смеха. При виде кусков кода по разбору, и парсингу std::string !!!


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 16.6.2008, 17:37 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



andrew_121, зачем стринг разбирать и более того, парсить? Нужно выделить какой-то элемент - напиши функцию, которая это делает. И будет все понятно. Как ты ее напишешь - сугубо на твоей совести, главное, чтобы в основном теле программы прослеживался алгоритм, и не было лишних отвлечений на всякие ненужные в данном месте детали.
PM   Вверх
Lazin
Дата 16.6.2008, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(andrew_121 @  16.6.2008,  17:01 Найти цитируемый пост)
Понял. Нужно писать свой класс. Унаследоваться от std::string, впихнуть в него все что нужно.

все, я сюда больше не пишу smile 
распинался, распинался и бестолку, на всякий случай - информация к размышлению smile 
блин, да-же в .NET строки не умеют столько, сколько ты хочешь smile  
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 16.6.2008, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(bsa @  16.6.2008,  17:37 Найти цитируемый пост)
Как ты ее напишешь - сугубо на твоей совести

Замечательно сказано  smile 
Цитата(bsa @  16.6.2008,  17:37 Найти цитируемый пост)
зачем стринг разбирать и более того, парсить?

Пограмма - html, php - парсер. Типа препроцессора у нас, у программеров. В программе 14248 строк. Писана не мной. Есть шесть глюков.
Когда я начал пялиться в код....это было что-то... smile  smile 
Код, до того безобразно написан, что я, каждый файл, форматирую(вручную), и походу выискиваю бяки.

У меня внатуре дилемма !!!


Это сообщение отредактировал(а) andrew_121 - 16.6.2008, 19:55


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bronislav
Дата 16.6.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(andrew_121 @  16.6.2008,  18:24 Найти цитируемый пост)
В программе 14248 строк.

Ну в принципе не так уж и много

Я как-то программу на Delphi на 16к строк перевел на C++ за 3 недели smile
Правда впетчатления те еще smile 


--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
andrew_121
Дата 16.6.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(bronislav @  16.6.2008,  19:49 Найти цитируемый пост)
Я как-то программу на Delphi на 16к строк перевел на C++ за 3 недели

Следовало внести в книгу рекордов(настойчивости).


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bronislav
Дата 16.6.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(andrew_121 @  16.6.2008,  18:24 Найти цитируемый пост)
каждый файл, форматирую(вручную),


Вообще-то для таких вещей есть рефакторинг.
Тот же еклипс умеет автоматически переформатировать код в соостветствии с выбранным стилем



--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
andrew_121
Дата 16.6.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(bronislav @ 16.6.2008,  19:56)
Цитата(andrew_121 @  16.6.2008,  18:24 Найти цитируемый пост)
каждый файл, форматирую(вручную),


Вообще-то для таких вещей есть рефакторинг.
Тот же еклипс умеет автоматически переформатировать код в соостветствии с выбранным стилем

Так я в ручную, для того-что бы понять, и вкурить сею рукопись.(ух как заговорил)


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
bsa
Дата 16.6.2008, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



мы отошли от темы.
я уже упоминал правило, если какую-то задачу можно решить отдельной функцией с использованием открытого интерфейса класса, то так и надо делать. Более того, даже оператор сложения надо определять внешней функцией (так как есть конструктор копирования и метод конкатенции).

Кстати запись text.extractValue("name", &var); по длине равна: extractValue(text, "Name", &var); Зато вторая не перегружает интерфейс класса лишним.
Что тебе еще надо? toInt, toDouble? Ну если тебе кажется boost::lexical_cast слижком громоздким, то напиши для него соответствующие враперы: 
Код
namespace {
template<class T>
inline double toDouble(const T &v)
{
    return boost::lexical_cast<double>(v);
}

template<class T>
inline int toInt(const T &v)
{
    return boost::lexical_cast<int>(v);
}
//и так далее...
} //namespace
В итоге запись будет выглядеть так: double t = toDouble(text); Обрати внимание, что в данном случае запись получилась даже короче, чем если бы toDouble() был реализован в виде метода (нет точки). Более того, даже если у тебя text содержал что-то непереводимое в double, то будет кинуто исключение.
PM   Вверх
andrew_121
Дата 16.6.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



bsa - Спасибо.
Решено - boost respect !
Alek86 
Цитата

у буста есть утилитка, с помощью котрой можно "вытаскивать" из него определенные библиотеки с их зависимостями

Кто нибудь знает что это за тулза такая?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 16.6.2008, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(andrew_121 @  16.6.2008,  20:38 Найти цитируемый пост)
у буста есть утилитка, с помощью котрой можно "вытаскивать" из него определенные библиотеки с их зависимостями

которую лучше не использовать.. если не хотите гемороя с обновлением этой библиотеки smile 
PM MAIL Skype GTalk   Вверх
bsa
Дата 16.6.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



andrew_121, зачем тебе эта утилита?
Пишешь в документации к проекту, что для его сборки нужен boost, версии не ниже такой-то. И все. Остальное на совести тех, кто будет собирать.
PM   Вверх
andrew_121
Дата 16.6.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Всем приогромнейшее Спасибо.
Тема закрыта.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Alek86
Дата 17.6.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



опоздал, но все же
Цитата(andrew_121 @  16.6.2008,  17:01 Найти цитируемый пост)
А чё за зверь? Как звать? И много за собой тянет?

сюда смотри


Цитата(Lazin @  16.6.2008,  20:51 Найти цитируемый пост)
которую лучше не использовать.. если не хотите гемороя с обновлением этой библиотеки

нуну
и часто ты буст обновляешь?


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 17.6.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Alek86 @  17.6.2008,  10:12 Найти цитируемый пост)
нуну
и часто ты буст обновляешь? 

когда выходят новые версии, а теперь представь, что мне еще что-нибудь захотелось из буста использовать, мне еще вырезать кусочек))

Цитата(http://www.boost.org/doc/libs/1_35_0/tools/bcp/bcp.html)

The bcp utility is a tool for extracting subsets of Boost, it's useful for Boost authors who want to distribute their library separately from Boost, and for Boost users who want to distribute a subset of Boost with their application.

в общем это очень не для всех... smile 

Это сообщение отредактировал(а) Lazin - 17.6.2008, 10:34
PM MAIL Skype GTalk   Вверх
Alek86
Дата 17.6.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Lazin @  17.6.2008,  10:33 Найти цитируемый пост)
for Boost users who want to distribute a subset of Boost with their application.

я про это и говорил - человек не хочет весь буст с собой таскать

Цитата(Lazin @  17.6.2008,  10:33 Найти цитируемый пост)
когда выходят новые версии

а зачем его обновлять, если, допустим, операции для строк не поменялись?
или поменялись, но тебе те изменения побоку
твое же и так работает

Цитата(Lazin @  17.6.2008,  10:33 Найти цитируемый пост)
что мне еще что-нибудь захотелось из буста использовать,

ну ты прям щас как автор темы насчет класса строк говоришь smile
чтобы таксать с собой этакую God Library, в которой есть все
для того, чтобы "если что" не нужно было добавлять лишние файлы


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 17.6.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Alek86 @  17.6.2008,  10:45 Найти цитируемый пост)
я про это и говорил - человек не хочет весь буст с собой таскать

архив трудно распаковать? smile 

странные вы люди, значит буст с собой таскать как библиотеку - зло, а отрезать от него кусок и сделать частью своего проекта - гут smile 



Цитата(Alek86 @  17.6.2008,  10:45 Найти цитируемый пост)
ну ты прям щас как автор темы насчет класса строк говоришь smile
чтобы таксать с собой этакую God Library, в которой есть все
для того, чтобы "если что" не нужно было добавлять лишние файлы 

знаешь, класс и набор библиотек - немного разные вещи))
PM MAIL Skype GTalk   Вверх
vinter
Дата 17.6.2008, 13:27 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



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


--------------------
Мой блог
PM MAIL WWW   Вверх
andrew_121
Дата 17.6.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



Цитата(Lazin @  17.6.2008,  11:43 Найти цитируемый пост)
значит буст с собой таскать как библиотеку - зло, а отрезать от него кусок и сделать частью своего проекта - гут

Обсолютно согласен. Осознал. Нет смысла.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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