Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Функции для работы со строками.
Символ – элементарная единица, некоторый набор которых несет определенный смысл. В языке программирования С++ предусмотрено использование символьных констант. Символьная константа – это целочисленное значение (типа int) представленное в виде символа, заключённого в одинарные кавычки, например 'a'. В таблице ASCII представлены символы и их целочисленные значения.
// объявления символьной переменной char symbol = 'a'; // где symbol – имя переменной типа char // char – тип данных для хранения символов |
Строки в С++ представляются как массивы элементов типа char, заканчивающиеся нуль-терминатором \0 называются С строками или строками в стиле С.
\0 — символ нуль-терминатора.
Символьные строки состоят из набора символьных констант заключённых в двойные кавычки. При объявлении строкового массива необходимо учитывать наличие в конце строки нуль-терминатора, и отводить дополнительный байт под него.
// пример объявления строки char string[10]; // где string – имя строковой переменной // 10 – размер массива, то есть в данной строке может поместиться 9 символов, последнее место отводится под нуль-терминатор. |
Строка при объявлении может быть инициализирована начальным значением, например, так:
char string[10] = "abcdefghf"; |
Если подсчитать кол-во символов в двойных кавычках после символа равно их окажется 9, а размер строки 10 символов, последнее место отводится под нуль–терминатор, причём компилятор сам добавит его в конец строки.
Таблица 1 — Функции для работы со строками и символами | |
Функция | Пояснение |
strlen(имя_строки) | определяет длину указанной строки, без учёта нуль-символа |
Копирование строк | |
strcpy(s1,s2) | выполняет побайтное копирование символов из строки s2 в строку s1 |
strncpy(s1,s2, n) | выполняет побайтное копирование n символов из строки s2 в строку s1. возвращает значения s1 |
Конкатенация строк | |
strcat(s1,s2) | объединяет строку s2 со строкой s1. Результат сохраняется в s1 |
strncat(s1,s2,n) | объединяет n символов строки s2 со строкой s1. Результат сохраняется в s1 |
Сравнение строк | |
strcmp(s1,s2) | сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 С учётом регистра |
strncmp(s1,s2) | сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 С учётом регистра |
stricmp(s1,s2) | сравнивает строку s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 Без учёта регистра |
strnicmp(s1,s2) | сравнивает n символов строки s1 со строкой s2 и возвращает результат типа int: 0 –если строки эквивалентны, >0 – если s1<s2, <0 — если s1>s2 Без учёта регистра |
Конкатенация строк
Конкатенация двух строк означает их сцепление, при этом создается новая, более длинная строка. При объявлении строки
char original[128] = "Test ";оператор
strcat(original, " one, two, three!");превратит значение первоначальной строки original в "Test one, two, three!"
При вызове функции strcat() убедитесь, что первый аргумент типа char * инициализирован и имеет достаточно места, чтобы запомнить результат. Если c1 адресует строку, которая уже заполнена, а c2 адресует ненулевую строку, оператор strcat(c1, c2); перезапишет конец строки, вызвав серьезную ошибку.
Функция strcat() возвращает адрес результирующей строки (совпадающий с ее первым параметром) и может использоваться как каскад нескольких вызовов функций:
strcat(strcat(c1,c2),c3)Следующий пример показывает, как можно использовать функцию strcat() для получения в одной строке фамилии, имени и отчества, хранящихся отдельно, например, в виде полей базы данных. Введите фамилию, имя и отчество. Программа сцепит введенные вами строки и отобразит их как отдельную строку.
#include <iostream>#include <string.h>using namespace std;void main(){ //Резервирование места для ввода трех строк. char *fam = new char[128]; char *im = new char[128]; char *otch = new char[128]; //Ввод данных. cout << "Enter" << "\n"; cout << "\tSurname: "; cin >> fam; cout << "\tName: "; cin >> im; cout << "\tLastname: "; cin >> otch; //Резервирование места для результата. //Нужно учесть два пробела и результирующий //нулевой символ. char *rez=new char[strlen(fam)+strlen(im)+strlen(otch)+3]; //"Сборка" результата. strcat(strcat(strcpy(rez,fam)," "),im); strcat(strcat(rez," "),otch); //Возврат памяти в кучу. delete [] fam; delete [] im; delete [] otch; //Вывод результата. cout << "\nResult: " << rez; delete [] rez;}
Дата публикования: 2015-10-09; Прочитано: 364 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!