Предыдущий пост -
Следующий пост -

std::string

Рубрика: Контейнеры, Дата: 30 May, 2013, Автор:
Tags: ,

std::string это стандартные строки. Это не строки char* их можно копировать, использовать разные операции, да я еще сам этот контейнер не сильно знаю, но думаю после написания поста вопросов по поводу его использования уже не будет.

Заголовочные файлы:

#include <string>
using std::string;

Рассмотрим конструкторы (constructors)

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	//инициализация строкой
	string s("initial string");
	cout <<"s= "<<s<<endl;
	//вызов конструктора копирования
	string s1(s);
	cout <<"s1= "<<s1<<endl;//initial string
	//копирование часть строки от 8 символа и до в количестве 3
	string s2(s1,8,3);
	cout <<"s2= "<<s2<<endl;//str
	//копирование 6 символов из строки
	string s3 ("A character sequence", 6);
	cout <<"s3= "<<s3<<endl;//A char
	//инициализация строкой
	string s4 ("Another character sequence");
	cout <<"s4= "<<s4<<endl;
	//строка из 10 x
	string s5(10,'x');
	cout <<"s5= "<<s5<<endl;
	//инициализация символом через int
	string s6(10,42);
	cout <<"s6= "<<s6<<endl;
	//инициализация через указатели
	string s7(s3.begin(),s3.end());
	cout <<"s7= "<<s7<<endl;

	return 0;
}

string::operator=()

Копирует одну строку в другую.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow");
	string s1;
	//вывод размеров строки
	cout <<"s.size()= "<<s.size()<<endl;//6
	cout <<"s1.size()= "<<s1.size()<<endl;//0
	//присваиваем
	s1=s;
	//выводим теперь размеры
	cout <<"s.size()= "<<s.size()<<endl;//6
	cout <<"s1.size()= "<<s1.size()<<endl;//6

	return 0;
}

Рассмотрим итераторы

string имеет как прямые так и реверсивные константные и не константные итераторы. Для начала разберем как всегда прямые и реверсивные не константные итераторы.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world gacpada");

	//создание прямого итератора
	string::iterator it;
	for(it=s.begin();it!=s.end();++it)
		cout <<*it<<' ';
	cout <<endl;

	//создание реверсивного итератора
	string::reverse_iterator r_it;
	for(r_it=s.rbegin();r_it!=s.rend();++r_it)
		cout <<*r_it<<' ';
	cout <<endl;

	return 0;
}

Теперь рассмотрим константные итераторы.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world gacpada");

	//создание прямого итератора
	string::const_iterator it;
	for(it=s.begin();it!=s.end();++it)
		cout <<*it<<' ';
	cout <<endl;

	//создание реверсивного итератора
	string::const_reverse_iterator r_it;
	for(r_it=s.rbegin();r_it!=s.rend();++r_it)
		cout <<*r_it<<' ';
	cout <<endl;

	return 0;
}

Рассмотрим емкость (capacity)

string::size()

Функция возвращает размер строки.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world");

	cout <<"s.size()= "<<s.size()<<endl;

	return 0;
}

string::length()

Функция возвращает длину строки в символах.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world");

	cout <<"s.length()= "<<s.length()<<endl;//12

	return 0;
}

string::max_size()

Возвращает максимально возможный размер контейнера string.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world");

	cout <<"s.max_size()= "<<s.max_size()<<endl;//большое число

	return 0;
}

string::resize()

Функция которая принимает число int и изменяет размер size.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	//создание пустой строки
	string s;
	cout <<"s.size()= "<<s.size()<<endl;//0
	cout <<"s= "<<s<<endl;
	//изменим размер с помощью resize()
	s.resize(4);
	cout <<"s.size()= "<<s.size()<<endl;//4
	cout <<"s= "<<s<<endl;

	return 0;
}

string::capacity()

Функция возвращает емкость строки. Так же как и для вектора эта функция показывает сколько выделено памяти на данный момент. capacity всегда больше size либо равно size. Меньше size оно не может быть.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	//создание пустой строки
	string s;
	cout <<"s.size()= "<<s.size()<<endl;//0
	cout <<"s.capacity()= "<<s.capacity()<<endl;//15

	return 0;
}

Как мы видим у нас вывилось capasity() 15. Честно говоря я сам даже удивлен и не ожидал, что так будет. Но что ж поделаешь значит так оно и есть. Ладно уже, значит для пустой строки даже уже резервируется память на 15 символов, ну это в принципе разумно. Как правило одно слово больше 15 символов не будет. Поэтому наверно выбрали резервирование 15 символов. Ну что ж пускай.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	//создание пустой строки
	string s;
	cout <<"s.size()= "<<s.size()<<endl;//0
	cout <<"s.capacity()= "<<s.capacity()<<endl;//15

	return 0;
}

string::reserve()

Эта функция принимает int и изменяет capacity.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	//создание пустой строки
	string s;
	cout <<"s.size()= "<<s.size()<<endl;//0
	cout <<"s.capacity()= "<<s.capacity()<<endl;//15

	//изменим capacity
	s.reserve(5);
	cout <<"s.size()= "<<s.size()<<endl;//0
	cout <<"s.capacity()= "<<s.capacity()<<endl;//15

	s.reserve(30);
	cout <<"s.size()= "<<s.size()<<endl;//0
	cout <<"s.capacity()= "<<s.capacity()<<endl;//31

	return 0;
}

Как мы видим не понятно как он меняется, но меньше 15 не может быть и это факт.

string::clear()

Это функция которая очищает строку. Удаляет все элементы.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	//создание пустой строки
	string s("hellow world");
	cout <<"s= "<<s<<endl;//hellow worl
	//удалим строку
	s.clear();
	cout <<"s= "<<s<<endl;//пусто

	return 0;
}

string::empty()

Если строка пустая возращает true, если не пустая то false.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world");

	if(s.empty()) 
		cout <<"s is empty"<<endl;
	else
		cout <<"s is not empty"<<endl;//s is not empty

	return 0;
}

string::shring_to_fit()

Эту функцию мы рассматривать не будем, так как это стандарт 2011.

Рассмотрим функции доступа (Element access)

string::operator[]()

Доступ к элементам без проверки границ выхода за пределы.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world");

	for(int i=0;i<s.size();i++)
		cout <<s[i]<<' ';
	cout <<endl;

	return 0;
}

string::at()

Функция доступа с проверкой выхода за пределы.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <stdexcept>
using std::out_of_range;

int main()
{
	string s("hellow world");

	try
	{
		for(int i=0;i<=s.size();i++)
			cout <<s.at(i)<<' ';
		cout <<endl;
	}
	catch(out_of_range& e)
	{
		cout <<"out_of_range"<<endl;
	}

	return 0;
}

string::back() и string::front()

Функции доступа к последнему и первому элементу соответственно.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world");

	cout <<"s.back()= "<<s.back()<<endl;//d
	cout <<"s.front()= "<<s.front()<<endl;//h

	return 0;
}

Рассмотрим модификаторы (Modifiers)

string::operator+=()

Функция добавляет часть строки в конец существующей.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s("hellow world");

	s+=" gacpada";
	cout <<s<<endl;//hellow world gacpada

	return 0;
}

string::append()

Слово append переводится как добавлять. Эта функция добавляет в конец существующей строке другую строку, которая передается, как параметр функции.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s;
	string s1="hellow world ";
	string s2="gacpada pacajiru";

	//добавление полностью строки
	s.append(s1);
	cout <<s<<endl;//hellow world
	//добавление части строки
	s.append(s2,0,7);
	cout <<s<<endl;//hellow world gacpada
	//добавление передав константную строку
	s.append("what da da da",4,3);
	cout <<s<<endl;//hellow world gacpada da
	//копирование полностью константной строки
	s.append(" bygaga");
	cout <<s<<endl;//hellow world gacpada da bygaga
	//добавление 10 точек
	s.append(10,'.');
	cout <<s<<endl;//hellow world gacpada da bygaga..........
	//добавление через указатель
	s.append(s2.begin()+8,s2.end());
	cout <<s<<endl;//hellow world gacpada da bygaga..........pacajiru
	//непонятное добавление, я на офсайте подсмотрел
	//0x2E это знак видимо 46 видимо значение точки.
	s.append<int>(5,0x2E);
	cout <<s<<endl;//hellow world gacpada da bygaga..........pacajiru.....

	return 0;
}

string::push_back()

Функция принимает символ и добавляет его в конец строки.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s;
	char ch('a');

	//добавление элементов
	for(int i=ch;i<='z';i++)
		s.push_back(i);

	cout <<"s= "<<s<<endl;

	return 0;
}

string::assign()

Переводится как назначать. Это функция аналогична конструктору, который можно вызвать уже после инициализации. Это как бы аналогия с конструктором.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s;
	string s2="hellow world";

	//как конструктор копирования
	s.assign(s2);
	cout <<s<<endl;//hellow world
	//копирование части строки
	s.assign(s2,7,5);
	cout <<s<<endl;//world
	//назначение просто константной строкой
	s.assign("string assign",6);
	cout <<s<<endl;//string
	//назначение полность строкой
	s.assign("string assign");
	cout <<s<<endl;//string assign
	//назначение 10 звездачками
	s.assign(10,'*');
	cout <<s<<endl;//**********
	s.assign<int>(10,0x2D);
	cout <<s<<endl;//__________
	//копирование через указатели
	s.assign(s2.begin(), s2.end());
	cout <<s<<endl;//hellow world

	return 0;
}

string::insert()

Функция добавляет элементы в список.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="da da";
	string s1=" hellow world";
	string s2="to be was were been";

	//копирование после второго символва
	s.insert(2,s1);
	cout <<s<<endl;//da( hellow world) da
	//копирование кусочка из s2
	s.insert(2,s2,2,3);
	cout <<s<<endl;//da( be) hellow world da
	//копирование части константной строки
	s.insert(2," mazday",4);
	cout <<s<<endl;//da( maz) be hellow world da
	//вставка всей константной строки
	s.insert(2," ebta");
	cout <<s<<endl;//da( ebta) maz be hellow world da
	//вставка символа
	s.insert(2,1,':');
	cout <<s<<endl;//da(:) ebta maz be hellow world da
	//добавление через итератор
	string::iterator it;
	it=s.insert(s.begin()+8,',');
	cout <<s<<endl;//da: ebta(,) maz be hellow world da
	//добавляем в конец 3 точки
	s.insert(s.end(),3,'.');
	cout <<s<<endl;//da: ebta, maz be hellow world da(...)
	//вставка через итератор
	s.insert(it+2,s2.begin(),s2.begin()+3);
	cout <<s<<endl;//da: ebta, (to )maz be hellow world da...

	return 0;
}

string::erase()

Функция удаляет строку.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="Hellow world gacpada";
	//удалить часть строки начиная с символа 7 и 6 символов
	s.erase(7,6);
	cout <<s<<endl;//Hellow gacpada
	//удалить символ на который указывает итератор
	s.erase(s.begin()+5);
	cout <<s<<endl;//Hello gacpada
	//удаляем через итераторы
	s.erase(s.begin()+5,s.end());
	cout <<s<<endl;//Hello

	return 0;
}

string::replace()

функция заменяет часть строки на другую строку.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s1="hellow worlds";
	string s2="gacpada da da da";
	string s3="tryl9l9";
	string s4="barabawka kawka";

	//простая замена без итераторов
	string s=s1;
	cout <<s<<endl;//hellow world
	//замена в s после 7 символа и замена
	//в количестве 5 на строку s3
	s.replace(7,5,s3);
	cout <<s<<endl;//hellow tryl9l9s
	//замена в s после 7 сивола и замена 7 символов
	//на s4 после 10 символа и в размере 5 символов
	s.replace(7,7,s4,10,5);
	cout <<s<<endl;//hellow kawkas
	//замена начиная с 7 символа и в размере 6 символов
	//на константную строку "is the best"
	s.replace(7,6,"is the best");
	cout <<s<<endl;//hellow is the best
	//замена в s начиная с 7 и в размере 2 на
	//часть константной строки в размере 2
	s.replace(7,2,"best",2);
	cout <<s<<endl;//hellow be the best
	//вставка одиночных символов нескольких
	//в конец строки добавим 4 '!'
	s.replace(18,1,4,'!');
	cout <<s<<endl;//hellow be the best!!!!

	//использование итераторов

	//замена s на новую строку начиная с начало и до конца -4
	s.replace(s.begin(),s.end()-4,s2);
	cout <<s<<endl;//gacpada da da da!!!!
	//Замена на константрую строку начиная с начала
	//и до начало +7 на "hellow
	s.replace(s.begin(),s.begin()+7,"hellow");
	cout <<s<<endl;//hellow da da da!!!!
	//Замена s на часть константно строки в размере 3 символов
	//начиная с 8 символа и в размере 5
	s.replace(s.begin()+7,s.begin()+12,"netdot",3);
	cout <<s<<endl;//hellow net da!!!!
	//Добавление нескольких одиночных символов 'e'
	s.replace(s.begin()+8,s.begin()+9,4,'e');
	cout <<s<<endl;//hellow neeeet da!!!!
	//полностью замена на другую строку через итератор
	s.replace(s.begin()+7,s.end(),s4.begin(),s4.end());
	cout <<s<<endl;//hellow barabawka kawka

	return 0;
}

string::swap()

Меняет одну строку на другую.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow";
	string s1="world";

	cout <<"s= "<<s<<endl;//hellow
	cout <<"s1= "<<s1<<endl;//world
	//делаем замену строк
	s.swap(s1);
	cout <<"s= "<<s<<endl;//world
	cout <<"s1= "<<s1<<endl;//hellow

	return 0;
}

string::pop_back()

Это функция нового стандарта 2011, которая удаляет последний символ строки.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpadas";
	s.pop_back();
	cout <<s<<endl;//hellow world gacpada

	return 0;
}

Рассмотрим строковые операции (string operations)

string::c_str()

Функция возвращает строку в стиле C-строк с завершающим символом ‘\0’.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <cstring>
using std::strcpy;
using std::strtok;

int main()
{
	string s="hellow world gacpada da da da !!!";
	char* sc=new char[s.length()+1];
	//копируем 
	strcpy(sc,s.c_str());
	char* leksema=strtok(sc," ");
	while(leksema!=NULL)
	{
		cout <<leksema<<endl;
		leksema=strtok(NULL," ");
	}

	return 0;
}

string::data()

Функция возвращает константный указатель на данные только без завершающего символа ‘\0’.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <cstring>
using std::strlen;
using std::memcmp;

int main()
{
	string s="hellow world gacpada";
	char* sc="hellow world gacpada";

	if(strlen(sc)==s.size())
	{
		cout <<"s and sc is equal size"<<endl;
		if(memcmp(sc,s.data(),s.length())==0)
			cout <<"s and sc have equal content"<<endl;
	}

	return 0;
}

string::get_allocator()

Эту функцию пока пропустим, потому что на офф сайте нету примера.

string::copy()

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow wordl...";
	char mass[20];
	//размер который вернет copy()
	int length;
	//копирование 5 символов начиная с 7 символа строки s
	length=s.copy(mass,5,7);
	cout <<"length= "<<length<<endl;
	//добавляем завершающий символ
	mass[length]='\0';
	//выводим, то что у нас получилось
	cout <<mass<<endl;

	return 0;
}

string::find()

Функция принимает подстроку осуществляет поиск в строке и возвращает позицию вхождения подстроки в строке первую позицию.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";
	string s1="world";

	//осуществляем поиск
	size_t fined=s.find(s1);
	if(fined!=string::npos)
		cout <<"fined= "<<fined<<endl;//7

	//осуществляем 
	fined=s.find("world da da",fined+1,5);
	if(fined!=string::npos)
		cout <<"fined= "<<fined<<endl;//30

	//поиск в строке
	fined=s.find("gacpada");
	if(fined!=string::npos)
		cout <<"fined= "<<fined<<endl;//13

	//поиск одиночного символа в строке
	fined=s.find('.');
	if(fined!=string::npos)
		cout <<"fined= "<<fined<<endl;//35

	//применение fined с заменой
	fined=s.find(s1);
	s.replace(fined,s1.length(),"barabawka");
	cout <<"s= "<<s<<endl;

	return 0;
}

string::rfind()

Функция принимает подстроку и осуществляет поиск подстроки с конца строки.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";
	string s1="world";

	//осуществляет поиск подстроки с конца
	size_t fined=s.rfind(s1);
	cout <<"fined= "<<fined<<endl;

	return 0;
}

string::find_first_of()

Функция принимает подстроку и возвращает позицию любого символа из подстроки в строке.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";

	//осуществляет поиск подстроки с концас начала
    //любого символа из подстроки "rd"
	size_t fined=s.find_first_of("rd");
	cout <<"fined= "<<fined<<endl;//9
	cout <<"character= "<<s[fined]<<endl;//r

	return 0;
}

string::find_last_of()

Функция принимает подстроку, осуществляет поиск в строке и возращает первую позицию в строке соответствующую любому символу из подстроки. Поиск ведется с конца строки.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";

	//осуществляет поиск подстроки с конца
	//любого символа из подстроки "rd"
	size_t fined=s.find_last_of("rd");
	cout <<"fined= "<<fined<<endl;//34
	cout <<"character= "<<s[fined]<<endl;//d

	return 0;
}

string::find_first_not_of()

Функция принимает подстроку и осуществляет поиск в строке символов, которые не в ходят в подстроку. Возвращает первое вхождение символа не входящего в подстроку.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";

	size_t fined=s.find_first_not_of("hellow ");
	cout <<"fined= "<<fined<<endl;//9
	cout <<"character= "<<s[fined]<<endl;//r

	return 0;
}

string::find_last_not_of()

Функция принимает подстроку и возвращает первое вхождение в строке символа не входящего в подстроку. Поиск ведется с конца строки.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";

	size_t fined=s.find_last_not_of("hellow ");
	cout <<"fined= "<<fined<<endl;//35
	cout <<"character= "<<s[fined]<<endl;//.

	return 0;
}

string::substr()

Функция принимает начальную позицию и длинну и возвращает подстроку.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";

	cout <<s.substr(9,3)<<endl;//rld

	cout <<s.substr(14)<<endl;//gacpada da da da world.

	return 0;
}

string::compare()

Функция принимает подстроку и сравнивает с другой строкой, если строки равны, то возвращает 0 елси строка больше принимаемой строки, то наверно возвращает 1, если меньше принимаемой строки, то  -1 либо наоборот.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow world gacpada da da da world.";

	string s1="da da";

	if(s.compare(s1)!=0)
		cout <<s<<" not equal "<<s1<<endl;

	cout <<s.compare(s1)<<endl;//1
	cout <<s1.compare(s)<<endl;//-1

	return 0;
}

Рассмотрим функции не входящие в перегрузку (Non-member function overloads)

operator+()

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow";
	string s1="world";
	string s2="gacpada";
	string result;
	
	result=s+' '+s1+' '+s2+"!\n";
	cout <<result;

	return 0;
}

Операторы сравнения (relational operators)

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow";
	string s1="world";
	
	if(s==s1)cout <<"s==s1"<<endl;
	if(s!=s1)cout <<"s!=s1"<<endl;//s!=s1
	if(s>s1)cout <<"s>s1"<<endl;
	if(s<s1)cout <<"s<s1"<<endl;//s<s1
	if(s>=s1)cout <<"s>=s1"<<endl;
	if(s<=s1)cout <<"s<=s1"<<endl;//s<=s1

	return 0;
}

swap()

Функция принимает две строки и меняет их местами.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="hellow";
	string s1="world";
	
	cout <<"s= "<<s<<endl;//hellow
	cout <<"s1= "<<s1<<endl;//world
	//меняем местами
	swap(s,s1);
	cout <<"s= "<<s<<endl;//world
	cout <<"s1= "<<s1<<endl;//hellow

	return 0;
}

operator>>()

Оператор чтения из потока.

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include <string>
using std::string;

int main()
{
	string s;
	cout <<"enter name"<<endl;
	cin >>s;
	cout <<"your name is "<<s<<endl;

	return 0;
}

operator<<()

Оператор вывода в поток.

#include <iostream>
using std::cout;
using std::endl;
#include <string>
using std::string;

int main()
{
	string s="Hellow world!";
	cout <<s<<endl;

	return 0;
}

getline()

Функция принимает два параметра, первый поток ввода, а второй переменную типа string и в нее записывает целое предложение.

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#include <string>
using std::string;

int main()
{
	string s;
	cout <<"enter full name "<<endl;
	getline(cin,s);
	cout <<s<<endl;

	return 0;
}

На это все закончим со string

[youtube]http://www.youtube.com/watch?v=odbkfPsLBTM[/youtube]

  • Гость

    Может пригодится кому, очень быстро работает.
    #include
    using std::string;
    #define _my_ntostring(n) string(#n,sizeof(#n)-1)
    inline string my_itostring(int n){(void)n;return _my_ntostring(n);}

rss