Читайте также: |
|
Строка в С++ это массив символов, ограниченный признаком конца строки, которым служит символ '\0'. Массивы символов широко используются в программировании, так как общение пользователя с программой ведётся в основном с помощью использования текстовых сообщений. char s[100] - должен создать строку длинной от 0 до 99 символов, т.к. из 100 символов, выделенных под массив, один занимает признак конца строки. Данный символ может занимать любую позицию в строке, отсюда следует то, что строки могут иметь длину, изменяемую в ходе работы программы. Если s[0]='\0', то s - сдержит строку нулевой длины, то есть пустую строку.
Строковые константы представляются в тексте программы последовательностью символов, заключенной в “”. Под строковые константы в памяти выделяется массив, в котором располагются все символы и признак конца '\0'. Пустая строка хранится как один символ '\0'. Кроме этого в записи строки могут присутствовать символы такие, как, например, '\n' - переход на новую строку или '\t' - табуляция. Чаще всего для размещения строковой константы в массиве используется его инициализация.
Для вывода строк можно использовать опреатор <<. При вводе с помощью оператора >> в строку будут включены все символы до первого пробела. Для ввода строк, содержащих любые символы лучше всего использовать ф-цию getline(char s[], int n), которая читает из входного потока не более n-1 символов и помещает их в массиве s. Чтение символов прекращается при поступлении символа '\n' или при достижении конца файла (CTRL+Z).
Существует библиотека функций для работы со строками. Прототипы функций описаны в заголовочном файле string.h. В описаниях используется обозначение size_t для типа unsigned int. Данное обозначение вводится инструкцией
typedef unsigned int size_t; которая имеется в стандартных заголовочных файлах. Оператор typedef вводит новое названия для типа данных. Тип size_t используется для величин, которые не могут быть отрицательными, например, для размеров объектов.
size_t strlen(const char s[]); возвращает длину строки s. Завершающий символ ’\0’ не учитывается.
char *strcpy(char *dest, const char *src); копирует строку src в строку dest, возвращает указатель на копию dest.
int strcmp(const char *s1, const char*s2); посимвольно сравнивает строки s1 и s2, причем сравниваются коды символов. Возвращается значение <0, если первый несовпадающий символ s1 имеет код меньше чем код соответствующего символа s2, значение >0, если первый несовпадающий символ s1 имеет больший код, чем символ s2 и 0 при полном совпадении строк.
size_t strlen (const char s[]) - возвращает длину строки s[ ], символ конца строки '\0' - не учитывается. const указывает, что s - не изменяется внутри функции, инструкция size_t применяется, когда нужно указать размеры величины, которая не может быть отрицательной.
char* strcpy (char* dest, const char* stc) - копирует строку dest и возвращает указатель на dest.
int strcmp(const char* s1, const char* s2) - посимвольно сравнивает строки s1 и s2, причём сравниваются коды соответствующих символов, возвращает разницу кодов первых несовпадающих символов сравниваемых строк.
//функция реверсирования строки: Реверсирование – это перестановка символов строки в обратном порядке, при этом меняются местами первый и последний символы, второй и предпоследний и т.д.
#include <iostream.h> #include <string.h>
void revers(char s[])//revers: перестановка символов s в обратном порядке
{ int i, j; //i - номер первого, второго,...символа, j - номер последнего, предпоследнего,...символа
char tmp; //Промежуточная переменная для обмена символов
for(i = 0, j = strlen(s) -1; i < j; i++, j--)
tmp = s[i], s[i] = s[j], s[j] = tmp; }
int main()
{ const int MAX = 100;
char s[MAX]; //Память под строку
cout << "Введите строку:\n";
cin.getline(s, MAX);
revers(s); //Вызов функции реверсирования строки
cout << "Реверсированная строка:\n";
cout << s;
return 0;}
В заголовке цикла for(i = 0, j = strlen(s) -1; i < j; i++, j--) использован оператор запятая, чтобы объединить в одно выражение два выражения присваивания i = 0 и j = strlen(s) -1. Аналогично сделано с выражениями i++ и j--. В теле цикла три выражения присваивания объединяются запятой в единое выражение. Запятые, которые разделяют аргументы функций, переменные в описаниях и т.д., не имеют отношения к операции запятая и не обеспечивают вычислений слева направо.
Дата добавления: 2015-07-08; просмотров: 486 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Символы и символьные константы. Представления символов. Ввод и вывод символов. Привести примеры. | | | Препроцессор. Директивы препроцессора. |