Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Библиотечные функции обработки строк




 

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

Для строк не определена операция присваивания,

поскольку строка является не основным типом данных,

а массивом.

1) strcpy()

2) strncpy()

Формат strcpy(to, from)- копирует содержимое строки from в строку to.

to по длине не меньше from.

 

Присваивание выполняется с помощью функций стандарной библиотеки

или посимвольно "вручную" (что менее предпочтительно,

так как чревато ошибками)

Например, чтобы присвоить строке to строку from, можно воспользоваться функциями strcpy или strncpy:

 

Функция strcpy(to,from) копирует все символы строки,

yказанной вторым параметром (from), включая завершающий 0, в строку, указанную первым параметром (to).

 

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

 

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

3) strcat()

Формат strcat(s1, s2)-присоединяет строку s2 к концу строки s1.

Примечание строка s2 не меняется.

 

4) strcmp()

Формат strcmp (s1, s2)- сравнивает s1 с s2(лексико-графический)

s1 =s2 функция возвращает 0

s1 >s2 функция возвращает положительное значение

s1 <s2 функция возвращает отрицательное значение

 

5) strclen()

strclen(s) – возвращает количество символов, не считая

 

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

____________________________________________

Внимание

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

**************************************************

// Never trouble trouble, till trouble troubles you

// Никогда не беспокойте проблему, пока проблема не //беспокоит Вас

 

//arb2009_stroka6_1

#include<iostream.h>

#include<string.h>

void main()

{

int m;

char a[100] = "Never trouble trouble";

cout<<"Enter length of string m= ";

cin>>m;

char *p = new char[m];

strcpy(p,a);

cout<<"String p= "<<p<<endl;

 

char b[100] = "Good day!";

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

cout<<"String b= "<<b<<endl;

}

****************************************************

Если задать m=20, то напечатается

"Never trouble trouble" и

"Good day!" и нет никаких сообщений

 

Если задать m=3, то напечатается

"Never trouble trouble" и

"Good day!" и

сообщения об ошибке и "приложение будет закрыто"

хотя под строку p было выделено 3 байта

*************************************************

 

// Never trouble trouble, till trouble troubles you

//Никогда не беспокойте проблему, пока проблема не //беспокоит Вас

//arb2014_basic_functions

#include<iostream.h>

#include<string.h>

void main()

{

int m;

char a[100] = "Never trouble trouble";

cout<<"Enter length of string m= ";

cin>>m;

char *p= new char[m];

strcpy(p,a);

cout<<"length p="<<strlen(p)<<endl;

 

cout<<"String p= "<<p<<endl;

 

char b[100] = "Good day!";

 

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

cout<<"String p= "<<p<<endl;

}

 

Комментарии.

Введем m=30 и m=3 для первой функции

strcpy(p,a);

cout<<"length p="<<strlen(p)<<endl;

//длина всегда 30 (?)

 

//arb2009_stroka5_1

#include<iostream.h>

#include<string.h>

void main()

{

char a[100] = "Never trouble trouble";

int m;

cout<<"Enter length of string m= ";

cin>>m;

 

char *p = new char[m];

char *q = new char [m];

strcpy(p,a);

cout<<"String p= "<<p<<endl;

 

char b[100] = "Good day!";

strncpy(p,b,3);

cout<<"String p= "<<p<<endl;

strncpy(q,b,3);

cout<<"String q= "<<q<<endl;

 

}

**********************************************

Если введем m=3

оператор:

strcpy(p,a);

cout<<"String p= "<<p<<endl;

 

результат:

String p= Never trouble trouble;

 

операторы:

char b[100] = "Good day!";

strncpy(p,b,3);

cout<<"String p= "<<p<<endl

 

результат:

String p= Gooer trouble trouble;

 

операторы

strncpy(q,b,strlen(b)+1);

cout<<"String q= "<<q<<endl;

 

результат

String p= "Good day!";

и сообщение об ошибке

 

Если введем m=10

Все тоже самое, но нет сообщения об ошибке

 

Указатель p адресует память, в которую скопировали

строку "Never trouble trouble".

Теперь туда же снова копируем новую строку

"Good day!", но только из этой строки берем 3 символа

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

Будет напечатано Gooer trouble trouble

 

p |.|------->| Never trouble trouble\0 |

Nev заменяется Goo

p |.|------->| Gooer trouble trouble\0 |

 

**************************************************

 

 

Функции преобразования

 

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

Признаком конца числа служит первый символ, который не может быть интерпретирован как принадлежащий числу.

Если преобразование не удалось возвращает 0.

 

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

 

Пример

 

 

//arb2009_stroka7_1

#include<iostream>

#include<cstring>

#include<cstdlib>

using namespace std;

void main()

{

char a[]= "10) Height-162sm, weight-59.55 kg";

int num;

long height;

double weight;

num = atoi(a);

height = atol(&a[11]);

weight = atof(&a[25]);

cout<<num<<' '<<height<<' '<<weight<<endl;

}

Печатает 10 162 59.55

 

Демонстрация функций

Программа 1

 

//arb2014_demostr_functions_Cstring

#include <iostream.h>

#include <string>

#include <ctype.h>

using namespace std;

void main()

{

char s1[30], s2[30];

strcpy(s1,"C++");

strcpy(s2," is power language!");

cout<<"Length of string s1="<<strlen(s1)<<endl;

cout<<"Length of string s2="<<strlen(s2)<<endl;

 

if (!strcmp(s1,s2)) cout<<"This strings are equals"<<endl;

else cout<<"This strings are not equals"<<endl;

strcat(s1,s2);

 

cout<<"s1= strcat(s1,s2); s1= "<<s1<<endl;

strcpy(s2,s1);

cout<<"s2=strcpy(s2,s1) s2="<<s2<<endl;

if (!strcmp(s1,s2)) cout<<"This strings are equals"<<endl;

else cout<<"This strings are not equals"<<endl;

cout<<"enter s1=";

cin>>s1;

s1[0]='A';

cout<<"s1[0]='A' s1= "<<s1<<endl;

int i;

for (i=0;s1[i];i++)

s1[i]= toupper(s1[i]);

cout<<"Upper s1="<<s1<<endl;

for (i=0;s1[i];i++)

s1[i]= tolower(s1[i]);

cout<<"Lower s1="<<s1<<endl;

}

 

Программа 2





Поделиться с друзьями:


Дата добавления: 2016-12-06; Мы поможем в написании ваших работ!; просмотров: 785 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Два самых важных дня в твоей жизни: день, когда ты появился на свет, и день, когда понял, зачем. © Марк Твен
==> читать все изречения...

2297 - | 2123 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.