рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Символьная информация и строки

Символьная информация и строки - раздел Философия, Конспект лекций по курсу Алгоритмические языки и программирование Основы языка С++ Для Символьных Данных В Си++ Введен Тип Char. Для Представления Символьной Ин...

Для символьных данных в Си++ введен тип char. Для представления символьной информации используются символы, символьные переменные и текстовые константы.

Примеры:

const char c=’c’; //символ – занимает один байт, его значение не меняется

char a,b;//символьные переменные, занимают по одному байту, значения меняются

const char *s=“Пример строки ” ;//текстовая константа

Строка в Си++ - это массив символов, заканчивающийся нуль-символом – ‘’ (нуль-терминатором). По положению нуль-терминатора определяется фактическая длина строки. Количество элементов в таком массиве на 1 больше, чем изображение строки.

 

A   A
“A” строка (2байта)   ‘A’ символ (1байт)

Рис.2. Представление строки и символа

Присвоить значение строке с помощью оператора присваивания нельзя. Поместить строку в массив можно либо при вводе, либо с помощью инициализации.

Пример

void main()

{

char s1[10]="string1";

int k=sizeof(s1);

cout<<s1<<" "<<k<<endl;

char s2[]="string2";

k=sizeof(s2);

cout<<s2<<" "<<k<<endl;

char s3[]={‘s’,’t’,’r’,’i’,’n’,’g’,’3’}

k=sizeof(s3);

cout<<s3<<" "<<k<<endl;

char *s4="string4";//указатель на строку, ее нельзя изменить

k=sizeof(s4);

cout<<s4<<" "<<k<<endl;

 

 

}

Результаты:

string1 10 – выделено 10 байтов, в том числе под

string2 8 – выделено 8 байтов (7+1байт под )

string3 8 – выделено 8 байтов (7+1байт под )

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 из стандартного потока до появления символа ‘ ’, сам символ ‘ ’ в строку не заносится.

int puts(const char* s) записывает строку в стандартный поток, добавляя в конец строки символ ‘ ’, в случае удачного завершения возвращает значение больше или равное 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”, чтение байтов осуществляется до символа ‘ ’, т. е. в s занесется строка”123 456 789 ”, при выводе строки функция puts возвращает еще один символ ‘ ’, следовательно, будет выведена строка “123 456 789 ”.

3. char s[20];

scanf(“%s”,s);//ввод строки из стандартного потока

printf(“%s”,s);//вывод строки в стандартный поток

Результат работы программы:

При вводе строки “123 456 789”, чтение байтов осуществляется до первого пробела, т. е. в строку s занесется только первое слово строки “123/0”, следовательно, выведется: 123. Т. к. s – имя массива, т. е. адрес его первого элемента, операция & в функции scanf не используется.

Для работы со строками существуют специальные библиотечные функции, которые содержатся в заголовочном файле string.h. Рассмотрим некоторые из этих функций:

Прототип функции Краткое описание Примечание
unsigned strlen(const char*s); Вычисляет длину строки s.  
int strcmp(const char*s1, const char *s2); Сравнивает строки s1 и s2. Если s1<s2, то результат отрицательный, если s1==s2, то результат равен 0, если s2>s1 – результат положительный.
int strcnmp(const char*s1, const char *s2); Сравнивает первые n символов строк s1 и s2. Если s1<s2, то результат отрицательный, если s1==s2, то результат равен 0, если s2>s1 – результат положительный.
char*strcpy(char*s1, const char*s2); Копирует символы строки s1 в строку s2.  
char*strncpy(char*s1, const char*s2, int n); Копирует n символов строки s1 в строку s2. Конец строки отбрасывается или дополняется пробелами.
char*strcat(char*s1, const char*s2); Приписывает строку s2 к строке s1  
char*strncat(char*s1, const char*s2); Приписывает первые n символов строки s2 к строке s1  
char*strdup(const char*s); Выделяет память и переносит в нее копию строки s При выделении памяти используются функции

Пример1:

Дана строка символов, состоящая из слов, слова разделены между собой пробелами. Удалить из строки все слова, начинающиеся с цифры.

#include <stdio.h>

#include <string.h>

void main()

{

char s[250], //исходная строка

w[25], //слово

mas[10][25];//массив слов

puts(“ введите строку”);

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<<" N=?";cin>>n;

char s[100];

char**matr=new char*[n];

for(int i=0;i<n;i++)

{

cout<<" S=?";

cin>>s;

matr[i]=new char[strlen(s)];

strcpy(matr[i],s);

}

for(i=0;i<n;i++)

{

cout<<matr[i];

cout<<" ";

}

int k;

cout<<" K=?";

cin>>k;

if(k>=n){cout<<"There is not such string ";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<<" ";

}

}


 

11. Функции в Си++

С увеличением объема программы становится невозможно удерживать в памяти все детали. Чтобы уменьшить сложность программы, ее разбивают на части. В Си++ задача может быть разделена на более простые подзадачи с помощью функций. Разделение задачи на функции также позволяет избежать избыточности кода, т. к. функцию записывают один раз, а вызывают многократно. Программу, которая содержит функции, легче отлаживать.

Часто используемые функции можно помещать в библиотеки. Таким образом, создаются более простые в отладке и сопровождении программы.

– Конец работы –

Эта тема принадлежит разделу:

Конспект лекций по курсу Алгоритмические языки и программирование Основы языка С++

Пермский Государственный технический университет... Кафедра информационных технологий и автоматизированных... Викентьева О Л...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Символьная информация и строки

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Алгоритм и программа
Алгоритм – точное предписание, определяющий вычислительный процесс, идущий от изменяемых начальных данных к конечному результату, т. е. это рецепт достижения какой-либо цели.

Свойства алгоритма
1. Массовость: алгоритм должен применяться не к одной задаче, а к целому классу подобных задач (алгоритм для решения квадратного уравнения должен решать не одно уравнение, а все квадратные уравнени

Языки программирования
Разные типы процессоров имеют разный набор команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого

Состав языка
В тексте на любом естественном языке можно выделить четыре основных элемента: символы, слова, словосочетания и предложения. Алгоритмический язык также содержит такие элементы, только слова называют

Тип int
Значениями этого типа являются целые числа. Размер типа int не определяется стандартом, а зависит от компьютера и компилятора. Для 16-разрядного процессора под него отводится 2 байта, для

Переменные
Переменная в СИ++ - именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значени

Выражения
Из констант, переменных, разделителей и знаков операций можно конструировать выражения. Каждое выражение представляет собой правило вычисления нового значения.. Если выражение формирует целое или в

Ввод и вывод данных
В языке Си++ нет встроенных средств ввода и вывода – он осуществляется с помощью функций, типов и объектов, которые находятся в стандартных библиотеках. Существует два основных способа: функции уна

Базовые конструкции структурного программирования
В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трех структур: линейной, разветвляющейся и циклической. Эти структуры называются базов

Программирование ветвлений
Задача №1.

Программирование арифметических циклов.
Для арифметического цикла заранее известно сколько раз выполняется тело цикла. Задача №2 Дана последовательность целых чисел из n элементов. Найти среднее арифметическое этой посл

Итерационные циклы
Для итерационного цикла известно условие выполнения цикла. Задача №5 Дана последовательность целых чисел, за которой следует 0. Найти минимальный элемент этой последовательности.

Массивы
В языке Си/Си++ ,кроме базовых типов, разрешено вводить и использовать производные типы, полученные на основе базовых. Стандарт языка определяет три способа получения производных типов: -

Формирование псевдодинамических массивов
При описании массива в программе надо обязательно указывать количество элементов массива для того, чтобы компилятор выделил под этот массив нужное количество памяти. Это не всегда бывает удобно, т.

Найти максимальный элемент массива.
#include<iostream.h> #include<stdlib.h> void main() { int a[100]; int n; cout<<” Enter the size of array:”;cin>>n;

Сортировка методом простого включения (вставки)
Элементы массива делятся на уже готовую последовательность и исходную. При каждом шаге, начиная с I=2, из исходной последовательности извлекается I-ый элемент и вставляется на нужное место готовой

Поиск в отсортированном массиве
В отсортированном массиве используется дихотомический (бинарный) поиск. При последовательном поиске требуется в среднем n/2 сравнений, где n – количество элементов в массиве. При дихотомическом пои

Понятии указателя
Указатели являются специальными объектами в программах на Си++. Указатели предназначены для хранения адресов памяти. Пример: Когда компилятор обрабатывает оператор определения переменной,

Динамические переменные
Все переменные, объявленные в программе размещаются в одной непрерывной области памяти, которую называют сегментом данных (64К). Такие переменные не меняют своего размера в ходе выполнения программ

Одномерные массивы и указатели
При определении массива ему выделяется память. После этого имя массива воспринимается как константный указатель того типа, к которому относятся элементы массива. Исключением является использовании

Многомерные массивы и указатели
Многомерный массив это массив, элементами которого служат массивы. Например, массив с описанием int a[4][5] – это массив из 4 указателей типа int*, которые содержат адреса одномерных массивов из 5

Динамические массивы
Операция new при использовании с массивами имеет следующий формат: new тип_массива Такая операция выделяет для размещения массива участок динамической памяти соответствующего разм

Объявление и определение функций
Функция – это именованная последовательность описаний и операторов, выполняющая законченное действие, например, формирование массива, печать массива и т. д. Функция, во-первых, является од

Прототип функции
Для того, чтобы к функции можно было обратиться, в том же файле должно находиться определение или описание функции (прототип). double line(double x1,double y1,double x2,double y2);

Параметры функции
Основным способом обмена информацией между вызываемой и вызывающей функциями является механизм параметров. Существует два способа передачи параметров в функцию: по адресу и по значению.

Локальные и глобальные переменные
Переменные, которые используются внутри данной функции, называются локальными. Память для них выделяется в стеке, поэтому после окончания работы функции они удаляются из памяти. Нельзя возвращать у

Передача одномерных массивов как параметров функции
При использовании массива как параметра функции, в функцию передается указатель на его первый элемент, т. е. массив всегда передается по адресу. При этом теряется информация о количестве элементов

Передача многомерных массивов в функцию
При передаче многомерных массивов в функцию все размерности должны передаваться в качестве параметров. По определению многомерные массивы в Си и СИ++ не существуют. Если мы описываем массив с неско

Функции с начальными (умалчиваемыми) значениями параметров
В определении функции может содержаться начальное (умалчиваемое) значение параметра. Это значение используется, если при вызове функции соответствующий параметр опущен. Се параметры, описанные спра

Подставляемые (inline) функции
Некоторые функции в СИ++ можно определить с использованием служебного слова inline. Такая функция называется подставляемой или встраиваемой. Например: inline float Line(float x1,f

Функции с переменным числом параметров
В СИ++ допустимы функции, у которых при компиляции не фиксируется число параметров, и , кроме того может быть неизвестен тип этих параметров. Количество и тип параметров становится известным только

Перегрузка функций
Цель перегрузки состоит в том, чтобы функция с одним именем по-разному выполнялась и возвращала разные значения при обращении к ней с различными типами и различным числом фактических параметров. Дл

Шаблоны функций
Шаблоны вводятся для того, чтобы автоматизировать создание функций, обрабатывающих разнотипные данные. Например, алгоритм сортировки можно использовать для массивов различных типов. При перегрузке

Указатель на функцию
Каждая функция характеризуется типом возвращаемого значения, именем и списком типов ее параметров. Если имя функции использовать без последующих скобок и параметров, то он будет выступать в качеств

Структуры
Структура – это объединенное в единое целое множество поименованных элементов данных. Элементы структуры (поля) могут быть различного типа, они все должны иметь различные имена. Форматы оп

Объединения
Объединение (union)- это частный случай структуры. Все поля объединения располагаются по одному и тому же адресу. Длина объединения равна наибольшей из длин его полей. В каждый момент времени в так

Динамические структуры данных
Во многих задачах требуется использовать данные, у которых конфигурация, размеры и состав могут меняться в процессе выполнения программы. Для их представления используют динамические информационные

Линейный однонаправленный список
Описание простейшего элемента такого списка выглядит следующим образом: struct имя_типа { информационное поле; адресное поле; }; Информационное

Работа с двунаправленным списком
  Рис. 6 Двунаправленный список   Пример 3. 1. Создать дв

Потоковый ввод-вывод
На уровне потокового ввода-вывода обмен данными производится побайтно, т. е. за одно обращение к устройству (файлу) производится считывание или запись фиксированной порции данных (512 или 1024 байт

Открытие и закрытие потока
Прежде, чем начать работать с потоком, его надо инициировать, т. е. открыть. При этом поток связывается со структурой предопределенного типа FILE, определение которой находится в файле <stdio.h&

Символьный ввод-вывод
Для символьного ввода-вывода используются функции: - int fgetc(FILE*fp), где fp – указатель на поток, из которого выполняется считывание. Функция возвращает очередной символ в форме int из

Строковый ввод-вывод
Для построчного ввода-вывода используются следующие функции: 1) char* fgets(char* s,int n,FILE* f), где char*s – адрес, по которому размещаются считанные байты, int n – к

Блоковый ввод-вывод
Для блокового ввода-вывода используются функции: 1) int fread(void*ptr,int size, int n, FILE*f), где void*ptr – указатель на область памяти, в которой размещаются считанные из фай

Форматированный ввод-вывод
В некоторых случаях информацию удобно записывать в файл без преобразования, т. е. в символьном виде пригодном для непосредственного отображения на экран. Для этого можно использовать функции формат

Прямой доступ к файлам
Рассмотренные ранее средства обмена с файлами позволяют записывать и считывать данные только последовательно. Операции чтения/записи всегда производятся, начиная с текущей позиции в потоке. Начальн

Удаление и добавление элементов в файле
Пример 1: void del(char *filename) { //удаление записи с номером х FILE *f, *temp; f=fopen(filename,”rb”);//открыть исходный файл для чтения te

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги