
- •1)Коды символов. Таблицы кодов. Коды команд управления выводом данных. Обработка символов.
- •2)Коды символов типа char.Изменение кодировки символа
- •3)Коды символов. Вставка символа в строку
- •4)Вывод символов по их кодам
- •6)Вывод символа шеснадцатиричной цифры по ее коду
- •7)Вывод значения шестнадцатеричной цифры по ее символу
- •8) Вывод значения десятичной цифры по ее символу
- •9)Преобразование строчной латинской буквы а прописную
7)Вывод значения шестнадцатеричной цифры по ее символу
s |
‘0’ |
‘1’ |
‘2’ |
‘3’ |
‘4’ |
‘5’ |
‘6’ |
‘7’ |
‘8’ |
‘9’ |
‘A’ |
‘B’ |
‘C’ |
‘D’ |
‘E’ |
‘F’ |
|
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
65 |
66 |
67 |
68 |
69 |
70 |
z |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
#include<iostream>
#include <iomanip>
using namespace std;
int z (char s)
{if(s>='0' &&s<='9') return s-'0';
else if (s>='A' && s<='F') return s-'A'+10;}
int main()
{ char c;
do { cout<<"c:";cin>>c;
cout<<setw(4)<<z(c)<<endl;
}while (c!='z');
cout<<endl;
return 0;}
8) Вывод значения десятичной цифры по ее символу
#include<iostream>
#include <iomanip>
using namespace std;
int z (char s)
{if(s>='0' &&s<='9') return s-'0';
}
int main()
{ char c;
do { cout<<"c:";cin>>c;
cout<<setw(4)<<z(c)<<endl;
}while (c!='z');
cout<<endl;
return 0;}
9)Преобразование строчной латинской буквы а прописную
#include<iostream>
#include <iomanip>
using namespace std;
int z (char s)
{if(s>='a' &&s<='z') return s=s-'a'+'A';}
int main()
{ char c;
do { cout<<"c:";cin>>c;
char s=z(c);
cout<<setw(4)<<s<<endl;
}while (c!='z');
cout<<endl;
return 0;}
10) Удаление лишних пробелов в строке.
Void nospace(char *c1, char *c2)
{
intj = 0; //индекс в выходном массиве
for(inti=0; c1[i]!=0; i++)
{
if(c1[i]!=’ ’)//текущий символ не пробел
{
if(i!=0 &&c1[i-1] == ‘ ’ &&j!=0)
{//не конец строки, предыдущий символ пробел, не первый символ в строке
c2[j+1] = ‘ ‘;//запись пробела
}
c2[j+1] = c1[i];//запись символа
}
}
c2[j]=’\0’;
}
11) Поиск слова максимальной длины.
Inp.seekg(0, ios::end);
intlen = inp.tellg(); //методtellg() определяетдлинуфайла
cout<< “len = ” <<len<<endl;
char *buf = new char [len+1];
inp.seekg(0, ios::beg);
strcpy(buf, “”); //очисткамассивасимволов
constintln = 81; //длина строки в тексте
charline[ln]; //массив символов для строки
while(inp.getline(line, ln)) //считывание строк пока не достигнет конец файла
strcat(buf, line);//последняя запись строк в массив символов
cout<< “buf = ” <<endl<<buf<<endl<<endl;
inti=0; //текущая позиция символа в тексте
intn=0; //длина слова
intimax = 0; //индекс начала слова
intLmax = -1; //длина максимального слова
for(i=0; buf[i]!=0; i++) //цикл для анализа каждого символа
{
if(buf[i]!=’ ’) n++; //если пробел, то слово заканчивается
else
{
if (n>Lmax)
{//если слово больше максимального
Lmax = n; //фиксация длины слова
Imax = i-n; // фиксация начала слова
}
n=0; //сброс счетчика длины слова
}}
//если последнее слово больше максимального
if(n>Lmax)
{
Lmax = n;
Imax = i-n;
}
For(I = imax; i<=imax+Lmax; i++) //цикл по символам максимального слова
Cout<<buf[i];
12) Сортировка слов в строке.
Voidsort(char *buf, char *bufs)
{//сортировка слов в строке в порядке убывания
Inti=0; //текущий индекс в выходной файл
Intk; //индекс начала максимального слова
IntLmax; //длина максимального слова
While ((k=find(buf))!=-1) //определение индекса очередного слова
{
For( ; buf[k] =!=’ ’ &&buf[k]!=0; i++, k++) //цикл по символам слова
{
Bufs[i] = buf[k]; //запись символа в выходной массив
Buf[k] = ‘ ‘; //запись пробела вместо символа во входном массиве
}
Bufs[i++]=’ ’; //добавление пробела после слова
}
Bufs[i]=0; //задание нуль-символа в конце строки
}
13) Преобразование строки в число.
Пример: ‘1234’ -> 1234
Алгоритм: исходная 0
0*10+1=1
1*10+2=12
12*10+3=123
123*10+4=1234
IntStrToInt(char *c)
{
Inti; //индекс текущего символа
Int n; //выходное число
For(i=0; !(c[i]>=’0’ && c[i]<=’9’); i++) //поискпервойцифры
If(c[i] == ‘\0’) return 0;//если конец строки, то выход из цикла
For(n =0; c[i]>=’0’ &&c[i]<=’9’; i++)
n = n*10 + c[i] – ‘0’;
return n;
}
14) Преобразование числа в строку.
Пример: 1234-> ‘1234’
Исходноечисло: 1234
1234%10=4
123%10=3
12%10=2
1%10=1
Void IntToStr(char *c, int n)
{
Intk; //количество цифр в числе
Intj; //индекс текущего символа
For(j=n, k=0; j!=0; k++, j/=10);
c[k]=’\0’;
for(k--; k==0; k--, n/=10)
c[k] = n % 10 + ’0’;
}
15) Сравнениестрок.
Intmy_strcmp(unsigned char *s1, unsigned char *s2)
{
Inti;
For(i=0; s1[i]!=’\0’ && s2[i]!=’\0’; i++) // циклдоконцастроки
If(s1[i]!=s2[i]) break; //еслиi-тые символы не совпадают, то выход их цикла
If(s1[i] == s2[i]) return –0; // еслиi-тые символы совпадают, то строки одинаковые
If(s1[i]<s2[i]) return -1; //если символ 1ой строки меньше, то первая строка меньше
Return 1;
}
16) Сравнение строк с заданными весами символов.
Intmy_strcmp(char *s1, char *s2)
{
Inti;
Int c1;
Int c2;
For(i=0; c1[i]!=’\0’ &&s2[i]!=’\0’; i++) //цикл пока не будет достигнут конец строки
{
c1=weight(s1[i]);
c2=weight(s2[i]);
if(c1!=c2) break; //если весы не равны то выход из цикла
}
If(c1==c2) return 0;
If(c1<c2) return -1;
Return 1;
}
17) Выделение вложенных объектов.
Intfind(char *c)
{
Int k=0;
Int max;
Int b;
For(i=0, max=0, b=-1; c[i]!=0; i++) //циклпосимволам
{
If(c[i] == ‘}’) k--;
If(c[i] == ‘{’)
{
k++;
if(k>max) //если глубина вложений больше
{
Max = k;
b=i;
}
}
}
If(k!=0) return 0; return b;
}
18) Сортировка слов в строке см. 12
19) Преобразование строки в число см. 13
20) Структуры (struct). Назначение. Общий вид. Пример.
Структура – это структурированный тип данных(то есть имеющий сложную структуру)
Структуры используются при разработке информационных систем, баз данных.
Общий вид:
Struct имяТипа
{определение элементов полей;};
Пример:
Struct student
{Char fam[30]; //фамилия
Int kurs; //курс
Char grup[10]; //группа
Float stip; // стипендия
};
После этого student становится именем типа данных, который может быть назначен некоторым переменным:
Student stud1, stud2, *pst;
Здесь stud1 и stud2 – переменные типа student, a *pst – указатель на структуру типа student.
Чтобы получить доступ к полю, нужно воспользоваться операцией доступа:
ИмяСтруктуры. ИмяЭлемента
Stud1.fam stud1.stip
21) Структуры часто образуют массивы. Чтобы объявить массив структур,
вначале необходимо определить структуру (то есть определить агрегатный тип данных),
а затем объявить переменную массива этого же типа
На основании результата необходимо провести сортировку.
1. должны упорядочить поле по которому ищем,
2. провести поиск делением пополам и найти данные или вывести сообщение, что таковых не найдено
3. если данные найдены, то надо узнать где они лежат в исходной структуре (номер элемента массива (структуры))
22) Алгоритм
За основу возьмем программу поиска массива структур. Изменим ее так, что бы она вместо поиска упорядочивала массив, а затем записывала его в новый файл.
Для сортировки выберем метод выбора. Основная идея этого метода из массива выбирается наименьший элемент, меняется местами с первым элементом, затем рассматриваются элементы начиная со второго, наименьший из них меняется местами со вторым элементом и т д
Для упорядочивания требуется количество просмотров на единицу меньше чем количество элементов в массиве
Например:
for(i=0;i<Nrecord;i++)//сортировка номеров
{
int imin=i; запоминаем индекс первого элемента
for(int j=i+1;j<N;j++)
if(base[j].marsh<base[imin].marsh)
imin=j;
Man a=base[i];
base[i]=base[imin];
base[imin]=a;
}
23.Объединения(union). Назначение. Общий вид. Пример.
Это еще один структурированный тип данных.
Общий вид объединения:
union Имя типа;
{определение элементов полей;};
Объединения используются, когда необходимо получить доступ к одним и тем же данным разными способами.
Объединения отличаются от структуры способом организации внутренней памяти. Все элементы объединения в памяти начинаются с одного байта.
Пример:
union U;
{char ch.1;
char ch.2;};