Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




 

Строка представляет собой массив символов, заканчивающийся нуль-символом. В C++ есть две возможности работы со строками: функции, унаследованные из библиотеки С (заголовочный файл <string.h> или <cstring>), и библиотечный класс C++ string, предоставляющий более широкие возможности представления, обработки и контроля строк (он рассматривается в разделе «Строки».

Библиотека С содержит функции копирования строк (strcpy. strncpy), сравне­ния (strcmp, strncmp), объединения строк (strcat. strncat), поиска подстроки (strstr), поиска вхождения символа (strchr, strrchr, strpbrk), определения дли­ны строки (strlen) и другие. Полный список функций приведен в приложении 6.

В заголовочных файлах <stdlib.h> и <cstdlib> содержатся полезные функции преобразования строк в числа (обратные преобразования можно сделать с помо­щью функции sprintf): double atof(const char* p) преобразует переданную строку в double; int atoi (const char* p) преобразует переданную строку в int; long atol (const char* p) преобразует переданную строку в long.

Пробелы и табуляции в начале строки пропускаются. Преобразование прекраща­ется при встрече недопустимого символа или конца строки. Если строку нельзя преобразовать в число, возвращается 0. Если число выходит за пределы диапазо­на данного типа, переменной errno (заголовочный файл <cerrno>) присваивается значение ERANGE и возвращается допустимое число.

Пример (программа заполняет массив типа double из строки):

 

#include <stdio.h> #include <string.h>

#include <stdlib.h>

int main(){

char s[] = "2. 38.5. 70. 0. 0. 1". *p = s:

double m[10]:

int i = 0:

do{

m[i++] = atof(p);

if (i>9)break;

}while(p = strchr(p, ','), p++);

for(int k = 0; k<; k++) printf("%5.2f ". m[k]);

return 0:

}

Для работы с символами в стандартной библиотеке (заголовочные файлы <ctype. h> и <cctype>) есть следующие функции:

 

Имя проверка на принадлежность символа множеству
isalnum букв и цифр (A-Z, a-z, 0-9)
isalfa букв (A-Z, a-z)
iscntrl управляющих символов (с кодами 0..31 и 127)
isdigit цифр (0-9)
isgraph печатаемых символов, кроме пробела (isalfa | isdigit | ispunct)
islower букв нижнего регистра (a-z)
isprint печатаемых символов
ispunct знаков пунктуации
isspace символов-разделителей
isupper букв верхнего регистра (A-Z)
isxdigit шестнадцатиричных цифр (A-F, a-f, 0-9)

 

Функции принимают величину типа int и возвращают значение true, если усло­вие выполняется. Рекомендуется пользоваться стандартными функциями, а не писать собственные циклы проверки, так как это снижает количество ошибок в программе.

Кроме описанных выше, в библиотеке есть функции tolower и toupper, переводя­щие символ латинского алфавита соответственно в нижний и верхний регистр.

 

Символьные строки и строковые функции

 

Срока – это массив типа Char, завершающийся кодом нуль (\0)

Длину строки удобно задавать константой, т. к. при возможном изменении длины строки нужно будет изменить программу только в этом месте:

 

const int len_str = 80;

char str[len_str]; // в этой строке можно использовать не 80, а 79 символов

// (последний – «ноль»)

 

Строку можно инициализировать. При этом «ноль» создается автоматически:

char a[100]=”это строка”; // 10+1 = 11 байтов -проинициализированная строка

char *st=”Это строка”; // это указатель на строку-константу, его изменять

// нельзя

 

В динамической памяти строка создается так:

char *p=new char(m); // m определяется заранее

 

 

С++

Ввод-вывод строк средствами С++

 

Можно использовать cin, cout и другие функции.

 

сhar s[80];

cin>>s; // вводит последовательность символов до ближайшего

//пробела (т.е. вводит одно слово)

 

Ввести предложение:

Можно использовать метод getline или get класса IOSTREAM, объектом которого является cin:

char s[10];

cin.getline (s,80); /* считывает из потока 79 символов (или меньше если встретится (т.е. \n) и записывает их в строку s. Символ \n тоже считывается из потока, вместо него в строку помещается «ноль» */

cout<<s<<endl;

cin.get (s,80); /* Работает аналогично, только символ \n из потока не считывается (т.е. не удаляется из входного потока)*/

cout<<s<<endl;

 

Поэтому никогда 2 раза подряд не применяйте cin.get(s,n) не удалив из потока \n. Сделать это можно, вызвав cin.get() без параметров. Тогда код будет выглядеть так:

 

cin.get(s,80); // Ввести строку

cin.get(); //удалить Enter из потока

Cin.get(s,80); // Ввести строку

cin.get(); // удалить Enter из потока

 

или так:

 

cin.getline(s,80);

cin.getline(s,80);

 

С

Ввод-вывод строк средствами С.

1) scanf, printf – вводит/выводит одно слово:

#include <stdio.h>

int main(void)

{

const int n=10;

char s[n];

scanf(“%s”,s); /* ввод до ближайшего пробела, символ & опускать! т.к. имя строки это указатель на её начало*/

printf(“%S”,s);

return 0;

}

 

2) Ввести предложение:

scanf(“%10c”,s); // ввод строки с пробелами 10 это кол-во вводимых символов

printf(“%15s”,s); // выводит строку в 15 позиций, выравнивание по правому краю

 

3) Специальные средства ввода – вывода строк – gets и puts

const int n =10;

char s[n];

gets(s); // это лучший способ ввода строки в С

puts(s); // это лучший способ вывода строки в С

 

gets(s) – возвращает указатель на строку s. При ошибке возвращает NULL

puts(s) – в случае нормального нормального выполнения возвращает отрицательное число, в случае ошибки – EOF

 

Итог: printf удобно использовать при выводе данных различных типов. Если выводить только строки, то puts.

 

(Для ввода-вывода одного символа используют спец. функции:

GETCHAR()

PUTCHAR())

 

Различия между массивом символов и указателем на строку

 

Пример:

Char s1[]=”Я люблю кошек!”; // длина массива определяется автоматически

Char *s2=”Я люблю собак!”;

 




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


Дата добавления: 2014-01-11; Просмотров: 901; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.