Инструменты пользователя

Инструменты сайта


examination:oop:question16

16. Представление символьных значений. Строки. Операции со строками.

Символы и байты

Символьный или байтовый тип в языке Си++ относится к целым числам, однако мы выделили их в особый раздел, потому что запись знаков имеет свои отличия. Итак, для записи знаков в языке Си++ служат типы char и unsigned char.

  • (signed) char - 1 байт - символы целые числа от –128 до 127
  • unsigned char - 1 байт - символы целые числа от 0 до 255

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

Для работы с китайским, японским, корейским и рядом других алфавитов одного байта недостаточно, и используется кодировка с помощью двух байтов и, соответственно, тип wchar_t.

Чтобы объявить переменную байтового типа, нужно записать:

char c;           // байтовое число со знаком
unsigned char u;  // байтовое число без знака

Поскольку байты – это целые числа, то все операции с целыми числами применимы и к байтам. Стандартная запись целочисленных констант тоже применима к байтам, т.е. можно записать:

c = 45;

где c — байтовая переменная.

Однако для байтов существует и другая запись констант. Знак алфавита (буква, цифра, знак препинания), заключенный в апострофы, представляет собой байтовую константу, например:

'S' '&' '8' 'ф'

Для обозначения ряда непечатных символов используются так называемые экранированные последовательности – знак обратной дробной черты, после которого стоит буква. Эти последовательности стандартны и заранее предопределены в языке:

  • \a звонок
  • \b возврат на один символ назад
  • \f перевод страницы
  • \n новая строка
  • \r перевод каретки
  • \t горизонтальная табуляция
  • \v вертикальная табуляция
  • \' апостроф
  • \« двойные кавычки
  • \ \ обратная косая черта
  • \? вопросительный знак

Для того чтобы записать произвольное байтовое значение, также используется экранированная последовательность: после обратной дробной черты записывается целое число от 0 до 255.

char zero = '\0';
const unsigned char bitmask = '\0xFF';
char tab = '\010';

Следующая программа выведет все печатные символы ASCII и их коды в порядке увеличения:

for (char c = 32; c < 127; c++)
     cout << c << " " << (int)c << " ";

Однако напомним еще раз, что байтовые величины – это, прежде всего, целые числа, поэтому вполне допустимы выражения вида

'F' + 1;
'a' < 23;

и тому подобные.

Тип char был придуман для языка Си, от которого Си++ достались все базовые типы данных. Язык Си предназначался для программирования на достаточно «низком» уровне, приближенном к тому, как работает процессор ЭВМ, именно поэтому символ в нем – это лишь число.

В языке Си++ в большинстве случаев для работы с текстом используются специально разработанные классы строк, о которых мы будем говорить позже.

Строки

Язык С++ не поддерживает отдельный строковый тип данных. Строка в С++ - это массив переменных типа char, оканчивающийся нулевым символом ('\0').

Например:

char name[50];
cin>>name;
cout<<"Hello "<<name<<endl;

Есть второй вариант, более удобный - это специальный класс string. Объекты класса String - это особый тип контейнеров, специально предназначенных для работы с последовательностями символов.

В отличие от традиционных c-строки, которые являются всего лишь последовательность символов в памяти массив, C++ объекты string, относятся к классу с множеством встроенных функций для работы со строками более удобным способом и с некоторыми дополнительными полезными функциями.

Для его работы необходимо в начале программы подключить заголовочный файл string. В отличии от типа char, string является классом. Для создания строки вам необходимо в начале программы написать using namespace std.

#include <string>
using namespace std;
</cpp>
 
 
Пример работы с классом string:
<code cpp>
string name;
cout<<"Enter your name"<<endl;
cin>>name;
cout<<"Hi "<<s<<"!"<<endl;

Member functions

Cуществует множество функций для работы со строками.

  • s.append(str) - добавляет в конец строки строку str. Можно писать как s.append(переменная), так и s.append(«строка»);
  • s.assign(str) - присваивает строке s значение строки str. Аналогично записи s=str;
  • int i=s.begin() - записывает в i индекс первого элемента строки
  • int i=s.end() - аналогично, но последнего
  • s.clear() - как следует из названия, отчищает строку. Т.е. удаляет все элементы в ней
  • s.compare(str) -сравнивает строку s со строкой str и возвращает 0 в случае совпадение (на самом деле сравнивает коды символов и возвращает из разность)
  • s.copy(куда, сколько, начиная с какого) - копирует из строки s в куда (там может быть как строка типа стринг, так и строка типа char). Последние 2 параметра не обязательные (можно использовать функцию с 1,2 или 3 параметрами)
  • bool b=s.empty() - если строка пуста, возвращает true, иначе false
  • s.erase(откуда, сколько) удаляет n элементов с заданной позиции
  • s.find(str,позиция) - ищет строку str начиная с заданной позиции
  • s.insert(позиция,str, начиная, beg, count) - вставляет в строку s начиная с заданной позиции часть строки str начиная с позиции beg и вставляя count символов
  • int len=s.length() - записывает в len длинну строки
  • s.push_back(symbol) - добавляет в конец строки символ
  • s.replace(index, n,str) - берет n первых символов из str и заменяет символы строки s на них, начиная с позиции index
  • str=s.substr(n,m) - возвращает m символов начиная с позиции n
  • s.swap(str) меняет содержимое s и str местами.
  • s.size() - возвращает число элементов в строке.
  • (constructor) Construct string object (constructor member )
  • * operator= String assignment (public member function)

Iterators:

  • begin Return iterator to beginning (public member function)
  • end Return iterator to end (public member function)
  • rbegin Return reverse iterator to reverse beginning (public member function)
  • rend Return reverse iterator to reverse end (public member function)

Capacity:

  • size Return length of string (public member function)
  • length Return length of string (public member function)
  • max_size Return maximum size of string (public member function)
  • resize Resize string (public member function)
  • capacity Return size of allocated storage (public member function)
  • reserve Request a change in capacity (public member function )
  • clear Clear string (public member function)
  • empty Test if string is empty (public member function)

Element access:

  • operator[] Get character in string (public member function)
  • at Get character in string (public member function)

Modifiers:

  • operator+= Append to string (public member function)
  • append Append to string (public member function)
  • push_back Append character to string (public member function)
  • assign Assign content to string (public member function )
  • insert Insert into string (public member function )
  • erase Erase characters from string (public member function )
  • replace Replace part of string (public member function )
  • swap Swap contents with another string (public member function)

String operations:

  • c_str Get C string equivalent (public member function )
  • data Get string data (public member function)
  • get_allocator Get allocator (public member function )
  • copy Copy sequence of characters from string (public member function)
  • find Find content in string (public member function)
  • rfind Find last occurrence of content in string (public member function)
  • find_first_of Find character in string (public member function)
  • find_last_of Find character in string from the end (public member function)
  • find_first_not_of Find absence of character in string
  • find_last_not_of Find absence of character in string from the end (public member function)
  • substr Generate substring (public member function)
  • compare Compare strings (public member function )
examination/oop/question16.txt · Последние изменения: 2014/01/15 08:22 (внешнее изменение)