Хелпикс

Главная

Контакты

Случайная статья





Операции со строками. using namespace std;. int main(). char a[100] = Working with a strings;. char *p = new char [m];. return 0;



2.1.2 Операции со строками

Для строк не определена операция присваивания, поскольку строка является не основным типом данных, а массивом. Присваивание выполняется с помощью функций стандартной библиотеки или посимвольно «вручную» (что менее предпочтительно, так как чревато ошибками). Например, чтобы присвоить строке p строку a, можно воспользоваться функциями strcpy или strncpy, а для определения длинны строки – strlen.

#include "stdafx.h"

#include <iostream>

#include <string.h>

using namespace std;

int main()

{

char a[100] = "Working with a strings";

size_t m = strlen(a) + 1; //добавим 1 для учета нуль-символа

char *p = new char [m];

strcpy(p, a);

strncpy(p, a, strlen(a) + 1);

return 0;

}

Замечание. Использование функций strcpy и strncpy может быть небезопасным, так как они не проверяют размер буфера-приемника, что может привести к выходу за границы и затиранию чужих областей памяти. Выход за границы строки и отсутствие нуль-символа являются распространенными причинами ошибок в программах обработки строк. Для решения этой проблемы можно использовать безопасные версии функций: strcpy_s и strncpy_s, и избавить себя от собственноручного отслеживания размеров строки. При запуске программы компилятор выдает соответствующее предупреждение, которое можно проигнорировать в данном случае.

Для использования этих функций к программе следует подключить заголовочный файл <string.h>.

Функция strcpy(dst, src) копирует все символы строки, указанной вторым параметром (src), включая завершающий 0, в строку, указанную первым параметром (dst). Функция strncpy(dst, src, n) выполняет то же самое, но не более n символов, то есть числа символов, указанного третьим параметром. Если нуль-символ в исходной строке встретится раньше, копирование прекращается, а оставшиеся до n символы строки dst заполняются нуль-символами. В противном случае (если n меньше или равно длине строки src) завершающий нуль-символ в dst не добавляется.

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

Функция strlen(src) возвращает фактическую длину строки а, не включая нуль-символ.

Программист должен сам заботиться о том, чтобы в строке-приемнике хватило места для строки-источника (в данном случае при выделении памяти значение переменной m должно быть больше или равно 100), и о том, чтобы строка всегда имела завершающий нуль-символ.

Для преобразования строки в целое число используется функция atoi(str). Функция преобразует строку, содержащую символьное представление целого числа, в соответствующее целое число. Признаком конца числа служит первый символ, который не может быть интерпретирован как принадлежащий числу. Если преобразование не удалось, возвращает 0.

Аналогичные функции преобразования строки в длинное целое число (long) и в вещественное число с двойной точностью (double) называются atol и atof соответственно.

//Пример применения функций преобразования

#include "stdafx.h"

#include <iostream>

#include <string.h>



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.