Лабораторная работа Символы. Строки
Работа добавлена на сайт bukvasha.net: 2015-10-29Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Лабораторная работа №3
по дисциплине «Информатика и программирование»
Символы. Строки
Группа:
Студенты:
Преподаватель:
Твой город,2009
Задание
Вариант 07. Заменить в строке все символьные константы вида ‘A’ на соответствующие шестнадцатиричные (т.е. ‘А’ на 0х41).
Проектирование программы
Составные части:
1.Проверка введённой строки на наличие символьной константы типа ‘A’.
if (str[i]==39)//Если кавычка до этого момента уже была, то новая встреченная кавычка задаётся закрывающей
{
if (k)
{
k=0;
}
else
{
k=1;
}
}
else if (str[i]==' ')//Если символ - пробел, вывести пробел
{
cout << str[i];
}
2.С помощью деления числового значения символа на 16 получаем шестнадцатеричную константу (результат и остаток деления на 16).
b=a/j;//Деление числа на 16
j=j/16;//Деление j на 16. В следующем шаге b делится на 1 и выводится остаток от деления предыдущего шага
if (b==15)//Эта и следующие строки - вывод результатов деления. Замена чисел от 10 до 15 их 16-ричными эквивалентами
a=a-b*j*16;//а становится равно остатку от деления a на 16 в начале шага цикла
3.Замена закавыченных символов на соответствующие шестнадцатеричные. «Обычные символы» оставляем без изменений.
4.Выводим массив.
if (b==15)//Эта и следующие строки - вывод результатов деления. Замена чисел от 10 до 15 их 16-ричными эквивалентами
{
cout << 'F';
}
else if (b==14)
{
cout << 'E';
}
else if (b==13)
{
cout << 'D';
}
else if (b==12)
{
cout << 'C';
}
else if (b==11)
{
cout << 'B';
}
else if (b==10)
{
cout << 'A';
}
else
{
cout << b;
}
}
else
{
cout << str[i];//Если символ не заковычен - вывести сам символ
Текст программы с комментариями
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
void main()
{
char str[100];
char s[100];
gets(str);
bool k=0;
for (int i=0; str[i]!=0; i++)//Цикл замены каждого отдельного символа строки
{
if (str[i]==39)//Если кавычка до этого момента уже была, то новая встреченная кавычка задаётся закрывающей
{
if (k)
{
k=0;
}
else
{
k=1;
}
}
else if (str[i]==' ')//Если символ - пробел, вывести пробел
{
cout << str[i];
}
else
{
if (k)
{
int a;
int b;
a = (int) str[i];//а - числовое значение символа строки
cout << "0x";//Вывод 0x
int j=1;
while (j*16<a)//Самое больше число, кратное 16 и меньшее а. Т.к. символов 256, то число - 16.
{
j=j*16;
}
while (j>=1)
{
b=a/j;//Деление числа на 16
j=j/16;//Деление j на 16. В следующем шаге b делится на 1 и выводится остаток от деления предыдущего шага
if (b==15)//Эта и следующие строки - вывод результатов деления. Замена чисел от 10 до 15 их 16-ричными эквивалентами
{
cout << 'F';
}
else if (b==14)
{
cout << 'E';
}
else if (b==13)
{
cout << 'D';
}
else if (b==12)
{
cout << 'C';
}
else if (b==11)
{
cout << 'B';
}
else if (b==10)
{
cout << 'A';
}
else
{
cout << b;
}
a=a-b*j*16;//а становится равно остатку от деления a на 16 в начале шага цикла
}
}
else
{
cout << str[i];//Если символ не заковычен - вывести сам символ
}
}
}
}
Пример работы программы
AB'C' DE'F'
AB0x43 DE0x46Для продолжения нажмите любую клавишу . . .
Ошибки и ограничения. Выводы
Ошибок в программе нет, программа работает согласно условию задачи.