КАТЕГОРИИ: Архитектура-(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>) есть следующие функции:
Функции принимают величину типа 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; Просмотров: 942; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |