Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Символьная информация и строки
Для символьных данных в Си++ введен тип char. Для представления символьной информации используются символы, символьные переменные и текстовые константы. Примеры: const char c=’c’; //символ – занимает один байт, его значение не меняется char a,b;//символьные переменные, занимают по одному байту, значения меняются const char *s=“Пример строки\n”;//текстовая константа Строка в Си++ - это массив символов, заканчивающийся нуль-символом – ‘\0’ (нуль-терминатором). По положению нуль-терминатора определяется фактическая длина строки. Количество элементов в таком массиве на 1 больше, чем изображение строки.
Рис.2. Представление строки и символа Присвоить значение строке с помощью оператора присваивания нельзя. Поместить строку в массив можно либо при вводе, либо с помощью инициализации. Пример void main() { char s1[10]="string1"; int k=sizeof(s1); cout<<s1<<"\t"<<k<<endl; char s2[]="string2"; k=sizeof(s2); cout<<s2<<"\t"<<k<<endl; char s3[]={‘s’,’t’,’r’,’i’,’n’,’g’,’3’} k=sizeof(s3); cout<<s3<<"\t"<<k<<endl; char *s4="string4";//указатель на строку, ее нельзя изменить k=sizeof(s4); cout<<s4<<"\t"<<k<<endl;
} Результаты: string1 10 – выделено 10 байтов, в том числе под \0 string2 8 – выделено 8 байтов (7+1байт под \0) string3 8 – выделено 8 байтов (7+1байт под \0) string4 4 – размер указателя
Примеры: char *s=”String5”; - выделяется 8 байтов для строки char*ss; - описан указатель ss=”String6”;//память не выделяется, поэтому программа может закончиться аварийно. char *sss=new char[10];//выделяем динамическую память strcpy(sss,”String7”);//копируем строку в память
Для ввода и вывода символьных данных в библиотеке языка СИ определены следующие функции: 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) в случае ошибки. Примеры: 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 не используется. Для работы со строками существуют специальные библиотечные функции, которые содержатся в заголовочном файле string. h. Рассмотрим некоторые из этих функций:
Пример1:
Дана строка символов, состоящая из слов, слова разделены между собой пробелами. Удалить из строки все слова, начинающиеся с цифры. #include <stdio.h> #include <string.h> void main() { char s[250], //исходная строка w[25], //слово mas[10][25];//массив слов puts(“\nвведите строку”); gets(s); int k=0,t=0,i,len,j; len=strlen(s); while(t<len) { for(j=0,i=t;s[i]!=’ ‘;i++,j++)w[j]=s[i];//формируем слово до пробела w[j]=’/0’;//формируем конец строки strcpy(mas[k],w);//копируем слово в массив k++;//увеличиваем счетчик слов t=i+1;//переходим к следующему слову в исходной строке } strcpy(s,””);//очищаем исходную строку for(t=0;t<k;t++) if(mas[t][0]<’0’&&mas[t][0]>’9’)//если первый символ не цифра { strcat(s,mas[t]);//копируем в строку слово strcat(s,” “);//копируем в строку пробел } puts(s);//выводим результат } Пример2: Сформировать динамический массив строк. Удалить из него строку с заданным номером. #include <iostream.h> #include <string.h> void main() { int n; cout<<"\nN=?";cin>>n; char s[100]; char**matr=new char*[n]; for(int i=0;i<n;i++) { cout<<"\nS=?"; cin>>s; matr[i]=new char[strlen(s)]; strcpy(matr[i],s); } for(i=0;i<n;i++) { cout<<matr[i]; cout<<"\n"; } int k; cout<<"\nK=?"; cin>>k; if(k>=n){cout<<"There is not such string\n";return;} char **temp=new char*[n-1]; int j=0;
for(i=0;i<n;i++) if(i!=k) { temp[j]=new char[strlen(matr[i])]; strcpy(temp[j],matr[i]); j++; }
n--; for(i=0;i<n;i++) { cout<<temp[i]; cout<<"\n"; } } 11. Функции в С++ С увеличением объема программы становится невозможно удерживать в памяти все детали. Чтобы уменьшить сложность программы, ее разбивают на части. В Си++ задача может быть разделена на более простые подзадачи с помощью функций. Разделение задачи на функции также позволяет избежать избыточности кода, т. к. функцию записывают один раз, а вызывают многократно. Программу, которая содержит функции, легче отлаживать. Часто используемые функции можно помещать в библиотеки. Таким образом, создаются более простые в отладке и сопровождении программы.
|
|||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 30; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.204.208 (0.014 с.) |