Студопедия

КАТЕГОРИИ:


Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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