Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2009 лекции ПЯВУ часть1.doc
Скачиваний:
22
Добавлен:
27.03.2015
Размер:
823.3 Кб
Скачать

Функции для работы со строками

Функции для работы со строками находятся в стандартной библиотеке string.h

Определение длины строки

Для определения длины строки используется функция strlen. Она возвращает длину строки без учета символа конца строки.(рис. 7.1.)

#include <string.h>

#include <iostream>

using namespace std;

int main(void)

{

char *string = "Hello, world!";

cout<<strlen(string)<<endl;

return 0;

}

Рис. 7.1. Функция определения длины строки

Сложение двух строк (конкатенация)

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

#include <string.h>

#include <iostream>

using namespace std;

int main(void)

{

char destination[25];

char *blank = " ", *c = "C++", *vis = "Visual";

strcat(destination,vis);

strcat(destination,blank);

strcat(destination,c);

printf("%s\n",destination); //Visual C++

return 0;

}

Рис. 7.2. Функция сложения двух строки

Добавление к исходной строке указанного количества символов.

К результату добавляется завершающий нулевой символ (рис. 7.3.). Также существует функция, которая добавляет к строке полностью вторую строку – strcat.

#include <string.h>

#include <iostream>

using namespace std;

void main()

{

char string[80] = "This is the initial string!";

char suffix[] = " extra text to add to the string...";

/* Объединение строки с не более чем 19 символами suffix: */

cout<< "Before: " << string <<endl;

strncat( string, suffix, 19 );

cout<< "Before: " << string <<endl;

}

Before: This is the initial string!

After: This is the initial string! extra text to add

Рис. 7.3. Функция добавления указанного количества символов к строке

Копирование строки в другую строку

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

#include <string.h>

#include <iostream>

using namespace std;

int main(void)

{

char destination[25];

char *blank = " ", *c = "C++", *vis = "Visual";

strcpy(destination,turbo);

strcpy(destination,blank);

strcpy(destination,c);

cout<<destination<<endl; //C++

return 0;

}

Рис. 7.4. Функция копирования строки в другую

Сравнение строк

Что значит строка «больше» или «меньше» другой строки? Все буквы алфавита идут в определенном порядке. Это значит, что ‘Z’– это не просто буква английского алфавита, это 26-я буква английского алфавита. Все символы представляются внутри компьютера как численные коды, когда компьютер сравнивает две строки, он на самом деле сравнивает численные коды символов в строке (численные коды символов упорядочены только для латинских букв, это не касается кириллицы).

В попытке стандартизации представления символов большинство производителей компьютеров придерживаются одной из популярных кодирующих схем – ASCII «Американский стандартный код для информационного обмена» (American Standard Code for Information Interchange) или EBCDIC «Расширенный двоичный код закодированного десятичного обмена» (Extended Binary Code Decimal Interchange Code). Манипуляции со строками и символами на самом деле подразумевают манипуляцию с соответствующими численными кодами, а не с самими символами. Это объясняет взаимозаменяемость символов и целых в С/С++. Так как имеет смысл утверждать, что один численный код больше, меньше или равен другому численному коду, стало возможным сопоставлять различные строки и символы друг с другом путем ссылки на коды символов (см. рис. 7.5.).

Функция strcmpвозвращает 1, если первая строка больше второй, -1, если первая строка меньше второй, и 0, если строки эквивалентны.

#include <string.h>

#include <iostream>

using namespace std;

int main()

{

char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";

int ptr;

ptr = strcmp(buf2,buf1);

if(ptr>0)

cout<<"buf2 больше чем buf1 "<<endl;

else

cout<<"buf2 меньше чем buf1"<<endl;

ptr = strcmp(buf2,buf3);

if(ptr>0)

cout<<"buf2 больше чем buf3"<<endl;

else

cout<<"buf2 меньше чем buf3"<<endl;

return 0;

}

Рис. 7.5. Функция сравнения двух строк

Между собой можно сравнивать не строки целиком, а только части двух строк (рис. 7.6.). В этом случае будут сравниваться только первые nсимволов. При сравнении будут учитываться и регистры символов.

#include <string.h>

#include <iostream>

using namespace std;

int main(void)

{

char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";

int ptr;

ptr = strncmp(buf2,buf1,3);

if(ptr>0)

cout<<"buf2 больше чем buf1"<<endl;

else

cout<<"buf2 меньше чем buf1"<<endl;

ptr = strncmp(buf2,buf3,3);

if(ptr>0)

cout<<"buf2 больше чем buf3"<<endl;

else

cout<<"buf2 меньше чем buf3"<<endl;

return 0;

}

Рис. 7.6. Функция сравнения части двух строк