КАТЕГОРИИ: Архитектура-(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++ введен тип char. Строка на языке C++ – это массив символов. Пример определения строки в программе:
int main() { char str[10]; return 0; }
Строковым литералом называется последовательность символов, заключенная в двойные кавычки. В строковом литерале всегда на 1 символ больше, чем используется при записи; он всегда заканчивается нулевым символом ‘\0’. Например: sizeof(“Бор”) = 4;
Тип строкового литерала – массив константных символов. Таким образом, “Бор” принадлежит типу const char [4]. Строковый литерал можно присвоить переменной типа char*. Однако изменение строкового литерала через такой указатель является ошибкой: void f() { char* p= “Платон”; p[4] = ‘e’; //Ошибка: присваивание константе }
Если нужна строка, которую можно модифицировать, следует скопировать символы в массив: void f() { char p[]= “Зенон”; // p – массив из 6 символов p[4] = ‘e’; // правильно } Пример. Задать строку (массив символов) и подсчитать количество вопросительных знаков в ней:
int main() { int i, nQuestCount=0; char sInputLine[20]; cin >> sInputLine; for(i = 0; i < strlen(sInputLine); i++) if(sInputLine [i]=='?') ++ nQuestCount; cout<< nQuestCount << '\n'; return 0; } Для ввода и вывода символьных данных в библиотеке языка C определены следующие функции: int getchar(void) – осуществляет ввод одного символа их входного потока, при этом она возвращает один байт информации (символ) в виде значения типа int. Это сделано для распознавания ситуации, когда при чтении будет достигнут конец файла. int putchar (int c) – помещает в стандартный выходной поток символ c. char* gets(char*s) – считывает строку s из стандартного потока до появления символа ‘\n’, сам символ ‘\n’ в строку не заносится. int puts(const char* s) записывает строку в стандартный поток, добавляя в конец строки символ ‘\n’, в случае удачного завершения возвращает значение больше или равное 0 и отрицательное значение (EOF=-1) в случае ошибки.
Пример 66 1. char s[20]; cin>>s; //ввод строки из стандартного потока cout<<s; //вывод строки в стандартный поток Результат работы программы: При вводе строки “123 456 789”, чтение байтов осуществляется до первого пробела (при отсутствии пробела до конца строки), т.е. в строку s занесется только первое слово строки “123/0”, следовательно, выведется: 123.
2. char s[20]; gets(s); //ввод строки из стандартного потока puts(s); //вывод строки в стандартный поток Результат работы программы: При вводе строки “123 456 789”, чтение байтов осуществляется до символа ‘\n’, т.е. в s занесется строка”123 456 789\n\0”, при выводе строки функция puts возвращает еще один символ ‘\n’, следовательно, будет выведена строка “123 456 789\n\n”. 3. char s[20]; scanf(“%s”,s); /*ввод строки из стандартного потока*/ printf(“%s”,s); /*вывод строки в стандартный поток*/ Результат работы программы: При вводе строки “123 456 789”, чтение байтов осуществляется до первого пробела, т.е. в строку s занесется только первое слово строки “123/0”, следовательно, выведется: 123. Т.к. s – имя массива, т.е. адрес его первого элемента, операция & в функции scanf не используется. 4.Прочитать несколько строк текста можно так: char str[100]; cin.getline(str, 100, '*'); Второй параметр этой функции (100) задаёт максимальную длину строки, третий (‘*’) – по какому символу прекратить ввод.
Функции работы с символьными строками (объявлены в заголовочном файле <string.h>):
char* strcpy(char* p, const char* q) //копирование из q в p char* strcat(char* p, const char* q) //добавление q к p size_t strlen(const char* p) //длина p (не считая конца строки) int strcmp(const char* p, const char* q) //сравнение p и q; меньше (-1), равно (0), //больше(1) char *strchr(const char *, int) // находит первое вхождение заданного //символа в строке char *strncat(char *, const char *, size_t) // добавляет заданное число символов //второй строки в конец первой int strncmp(const char *, const char *, size_t) // сравнивает заданное число символов //двух строк char *strncpy(char *, const char *, size_t) // копирует заданное число символов //второй строки в первую строку char *strrchr(const char *, int) // находит последнее вхождение заданного //символа в строке char *strstr(const char *, const char *) // находит первое вхождение второй //строки как подстроки первой
Из файла <ctype.h>: int isdigit(int); // определяет, цифра или нет int isalpha(int); //буква int isupper(int); //буква в верхнем регистре int islower(int); //буква в нижнем регистре int isspace(int); //символ – разделитель int ispunct(int); //символ пунктуации (ни один из вышеупомянутых) int isalnum(int); //буква или цифра int toupper(int); //перевод в верхний регистр int tolower(int); //перевод в нижний регистр
Дата добавления: 2014-11-29; Просмотров: 475; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |