Всем привет! Недавно я начал учить С++ (до этого писал на Pascal). И теперь, меня интересует вопрос " Какие есть функции, обрабатывающие строки, и какие для них нужно подключать библиотеки? "
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 160 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | Dominater069 | 154 |
8 | awoo | 154 |
10 | luogu_official | 150 |
Всем привет! Недавно я начал учить С++ (до этого писал на Pascal). И теперь, меня интересует вопрос " Какие есть функции, обрабатывающие строки, и какие для них нужно подключать библиотеки? "
Название |
---|
В С нет строк в паскалевском понимании. Классические Сишные строки — это массывы символов, которые заканчиваются 0 — символом конца строки. Функции для работы с такими строками есть в string.h. В С++ же существует класс string, для работы с которым есть библиотека string, которая расположена в пространстве имен std, то есть функции следует вызывать либо через std::, либо указывать директиву using namespace std;
Спасибо за ответ! А какие именно есть функции?
Если для сишных ASCII — строк, которые задаются как char *, то,например, strcpy, strcat, strcmp и подбные им, которые позволяют копировать, конкатенировать, сравнивать строки и т.п. Для класса string для добавления/сравнения перегружены стандартные операторы +,+=,== плюс имеются методы, определения длины строки, по строке можно проходиться итератором, в общем все методы класса, обращение к ним делается в виде string b; b+="abcd"; int a=b.length();
Пишу по памяти, что сразу приходит на ум: string s;
s.find ("substr"); — поиск подстроки
x = atoi(s.c_str()); — преобразование строки к числу типа int (s.c_str() указатель на массив char'ов)
sscanf (s.c_str(),"%lf",&x); — преобразование строки к типу double
s.erase (s.being () + n); — удаление n-того символа(с нуля), также у этого метода есть перегруженные варианты
reverse(s.begin(),s.end()); — перевернуть строку
sort(s.begin(),s.end()); — отсортировать символы в строке
s += s; s += string("test");- конкатенация
cout << s; — вывод строки
s.push_back (ch); — вставка символа ch типа char в конец строки
s.pop_back(); — удаление последнего сивола
s.clear(); — отчистка строки
s.resize(len); — зарезервировать место под строку (для того,чтобы не перевыделялась память при посимвольной вставке)
...и еще что-то есть.
Это
.reserve()
резервирует место под будущие вставки, а вот.resize()
сразу увеличивает длину строки до указанного количества символов.Преобразовывать строку во что угодно в стиле C++ удобно и так:
только иногда это tl-ится.
Подробнее читай здесь: http://www.cplusplus.com/reference/string/string/
Подробнее всего читать MSDN=) Он, как бы, для того и создан, чтобы содержать всю необходимую информацию обо всех функциях. Cтавится вместе с Visual Studio. Еще есть сайт http://msdn.microsoft.com/ . Если нужен именно класс string, вот ссылка http://msdn.microsoft.com/ru-ru/library/system.string.aspx . Правда, откровенно говоря, кроме операций =,+=,+,==,[] и length(), больше ничего не понадобится, по крайней мере для олимпиадного программировния.
C++ != Visual Studio
Никто и не предлагает читать про Visual Basic, .Net или C#. Но функции C++ в MSDN очень подробно описаны и там много хороших примеров их применения.
На мой взгляд, cplusplus.com лучше подходит для того, чтобы узнать, какие методы у каких классов есть, он, кажется, больше ориентирован на стандарт языка.
Простой пример — есть класс std::exception. По стандарту(и в gnu компиляторе, если я не ошибаюсь) у него нет конструктора от std::string, а в компиляторе visual studio(и на сайте msdn) он есть.
Таким образом, читая msdn можно нарваться на необычную ошибку(выбрав неправильный компилятор) "у меня всё работает, отправляю решение в тестирующую систему и там compilation error:("
UPD: К вопросу про полезные функции. Мне ещё часто пригождается std::string::substr, чтобы выделить какую-то подстроку.
Или здесь.
Недавно я начал учить С++ (до этого писал на Pascal).
Воу-воу, полегче.
О Боже, какая шутка!