Алгоритмы обработки символьной информации на языке Си


Использование расчетных измерений



бет5/6
Дата19.02.2023
өлшемі89,27 Kb.
#69188
1   2   3   4   5   6
2.2 Использование расчетных измерений

Преобразование целого числа из внутренней формы во внешнюю форму (вывод целого числа). При преобразовании значение наименьшей цифры целого числа равно остатку от деления на 10, остаток от деления на второе число 10 равен N / 10 и так далее. Алгоритм основан на цикле, где на каждом шаге значение следующего числа справа берется как остаток от деления числа на 10, а само число уменьшается в 10 раз. Поскольку числа расположены в обратном порядке (арабский), массив символов также должен быть заполнен от начала до конца. Для этого необходимо предварительно рассчитать количество цифр или заполнить дополнительные позиции слева нулями или пробелами.


// ------------------------------------------------- ------ 44-09.cpp
// - - - - Вывести целое десятичное число
void IntToString (char c [], int n)
{int nn, k;
для (nn = n, k = 0; nn! = 0; k ++, nn / = 10); // Подсчитываем количество цифр
c [k] = '\ 0'; // конец линии
for (k--; k> = 0; k--, n / = 10) // Получить числовые цифры
c [k] = n% 10 + '0'; // в обратном порядке
}}
При преобразовании дроби во внешний вид, умножении дроби на 10 (то есть по числовой системе) следующее число «выходит» целиком. Появляется персонаж, а затем отбрасывается вся часть.
// ------------------------------------------------- ------ 44-10.cpp
// - - - - Вывод десятичного числа
void FloatToString (char c [], double v)
{int i, nn, k, kk;
для (nn = v, k = 0; nn! = 0; k ++, nn / = 10); // Подсчитываем количество цифр
кк = к-1; c [k ++] = '.'; // целая часть числа
for (nn = v; kk> = 0; kk--, nn / = 10) // Получение цифр
c [kk] = nn% 10 + '0'; // в обратном порядке
v - = (int) v; // Удаляем всю деталь
for (i = 0; i <6; i ++) {
v * = 10 .; // * 10 - следующее число
c [k ++] = (int) v + '0'; // пишем полностью
v - = (int) v; // и отбросить
c [k] = 0; }}
Восточные фрагменты целых чисел и дробей «сшиваются» с запоминанием положения в строке символа «точка», разделяющего целую и дробную части.
При преобразовании дробной части во внутреннюю форму необходимо учитывать значение текущей степени 10-k, чтобы умножить следующее число дробной части.

// ------------------------------------------------- ------ 44-11.cpp


// - - - - - Введите десятичное число
double StringToFloat (char c []) {
int i;
двойной n, v;
for (i = 0 ;! (c [i]> = '0' && c [i] <= '9'); i ++)
f (c [i] == '\ 0') return 0; // Ищем первое число
for (n = 0; c [i]> = '0' && c [i] <= '9'; i ++) // агрегирование
n = n * 10 + C [i] - «0»; // "число после числа"
if (c [i]! = '.') вернуть n
for (i ++, v = 0.1; c [i]> = '0' && c [i] <= '9'; i ++) {
n + = v * (c [i] - '0'); // измеряем числа
V = v / 10; // выгружаем вес дробной части
}}
return n;
Преобразование внешней формы числа в другую систему счисления выполняется аналогичным образом, только используется основание системы вместо 10, а для систем чисел больше 10 применяется специальное преобразование символов-чисел во внутренний вид:

если (N <= 9) c = N + '0'; иначе c = n - 10 + 'A'; // внутренний внешний


если (c> = '0' & & C <= '9') n = c - '0'; // внешний внешний
иначе, если (c> = 'A' && c <= 'F') c = c - 'A' + 10;

Символическая и постобработка.


Последовательность символов в строке подчиняется определенному закону, другими словами, формату. Например, строку, содержащую слова, можно определить как последовательность символов слова, разделенных пробелами.
Вы можете написать одну и ту же программу редактирования текстовой строки разными способами. Если мы говорим о формате текстовой строки, вы можете управлять им двумя способами (см. 3.8):
* использовать логику переменных состояния. В этом случае в программе есть базовый цикл просмотра строки после символа, а значения переменной состояния меняются в зависимости от текущего символа. Например, чтобы выделить слова, достаточно использовать счетчик символов внутри слова, который обнуляется для каждого пробела и умножается на 1 для каждого символа слова. В этом случае, когда вы сбрасываете ненулевой счетчик, программа находится в конце текущего слова;
* При использовании структурной логики устанавливается взаимно однозначное соответствие между элементами формата (например, итерация) и управляющими структурами алгоритма (циклами соответственно). Описание формата как бы "пришито" к тексту алгоритма. Например, при редактировании строки должен быть цикл, для каждого шага видно одно слово (включая пробелы перед ним). В нем должно быть два цикла - последовательность пробелов и последовательность символов в слове.

// ------------------------------------------------- ------ 44-12.cpp


// - - - - Поиск слова - символьная обработка максимальной длины
// Функция возвращает индекс начала слова или 1, если слова нет
// Логика переменной состояния - это счетчик N-символа
int find (char s []) {
int i, n, lmax, b;
for (i = 0, n = 0, lmax = 0, b = -1; s [i]! = 0; i ++) {
если (s [i]! = '') N ++; // Увеличиваем счетчик символа слова
else {// счетчик перед отправкой
если (n> lmax) {lmax = n; b = дюйм; }}
N = 0; // Подтверждаем максимальное значение
}} // То же самое для последнего слова
если (n> lmax) {lmax = n; b = дюйм; }}
return b; }}
// ------------------------------------------------- ------ 44-13.cpp
// - - - - Обработка уровня поиска Word максимальной длины
// Структурная логика - 3 цикла: посмотрите на слова, пробелы и символы
int find (char in []) {
int i = 0, k, m, b;
b = -1; m = 0;
while (in [i]! = 0) {// цикл сканирования строки
while (in [i] == '') i ++; // пропускаем пробел перед словом
для (k = 0; in [i]! = '' && in [i]! = 0; i ++, k ++); // Рассчитываем длину слова
if (k> m) {// максимальный контекст выбора
m = k; b = ik;} // / запомнится одновременно
} / / начальный индекс
return b; }}
Когда строковое представление завершено, последнее слово (если после него нет пробела) отображается без редактирования. Поэтому максимальная фиксация повторяется после выхода из контекстного цикла.
Здесь можно описать еще один принцип разработки программы: написав ее для бесплатного «среднего» состояния, ее нужно проверять «чрезмерно». В этом случае, когда в строке нет слов (строка состоит из пробелов или пробелов), в качестве результата возвращается начальное значение b = -1 (это предполагается при установке значения -1 как недопустимого).
Функция работает со строкой, потому что она принимает массив символов, который появляется в качестве параметра перед определением символа в конце строки. Переменная NS - это счетчик. Условие состоит в том, что текущий символ, умножающий счетчик, не является пробелом, а следующий - пробелом или концом строки. Это условие определяет конец слова. Таким образом, программа вычисляет количество слов в строке, разделенных пробелами.
Любая строка символов, заключенная в двойные кавычки, считается строковой константой.
Для правильного вывода любая строка должна заканчиваться нулем - символом '\ 0', целочисленное значение которого равно 0. Когда вы объявляете константу пути, к ней автоматически добавляется нулевой символ. Таким образом, последовательность символов, которая является строковой константой, выделяется в основную память компьютера, включая нулевые байты, для выделения последовательных ячеек RAM для хранения. Таким образом, строка представляет собой массив символов. Для хранения кода каждого строкового символа отводится 1 байт.
Символьные комбинации используются для размещения некоторых служебных символов в константе пути. Итак, если вы хотите добавить в строку двойные кавычки, перед ней должен стоять символ «обратной косой черты»: '\' '.
Дорожные константы хранятся в статической памяти. Начальный адрес строки символов в двойных кавычках интерпретируется как адрес строки. Строковые константы часто используются для связи с пользователем в таких функциях, как printf ().
При определении массива символов сообщите компилятору, сколько памяти вам нужно.
char m [82];
Если инициализация массива установлена ​​при объявлении строковой константы, компилятор может автоматически определить размер массива символов:
char m2 [] = "горные вершины ночью спят в темноте.";
char m3 [] = {'Т', 'и', 'х', 'и', 'е', '', 'д', 'о', 'Л', 'и', 'ы', ' ы ',' ',' п ',' о ',' л ',' н ',' ы ',' л ',' с ',' в ',' е ',' ж ',' е ', 'й', '', 'м', 'г', 'л', 'о', 'й', '\ 0'};
В данном случае имена m2 и m3 являются символами первых элементов массива:

m2 равно & M2 [0]


m2 [0] равно 'G'
m2 [1] равно 'o'
m3 равно & M3 [0]
m3 [2] равен 'X'
При объявлении массива символов и его инициализации строковой константой вы можете указать размер массива, но указанный размер массива должен быть больше, чем размер инициализированной строковой константы:
char m2 [80] = "горные вершины спят ночью в темноте.";
Вы можете использовать указатель типа символа на панели задач.
char * m4;
В этом случае объявление массива переменных M4 может присвоить адрес массива:
m4 = m3;
* m4 равно m3 [0] = 'T'
* (m4 + 1) равно m3 [1] = 'и'
Здесь m3 - постоянная величина. M3 нельзя изменить, потому что, в отличие от M4, это означает изменение местоположения (адреса) массива в памяти.
Вы можете использовать действие масштабирования для указателя (перейти к следующему символу):
m4 ++;
Массивы символьных строк
Иногда программам необходимо описать массив символьных строк. В этом случае вы можете использовать индекс пути для доступа к нескольким различным строкам.
char * Poet [4] = {"akyn öldi!", "- невольник чести -",
«Приятель», «клевета…»};
В данном случае поэт представляет собой массив из четырехзначных строк. Каждая строка символов представляет собой символьный массив, поэтому есть четыре указателя на массивы. Индекс поэта [0] относится к первой строке:
* поэт [0] равен 'P',
* поэт [l] альтернатива '-'.
Инициализация выполняется по правилам, определенным для массивов.
Текст в кавычках соответствует инициализации каждой строки в массиве. Запятая разделяет соседей
последовательность.
Вы также можете указать размер символьных строк, используя следующее описание:
поэт [4] [23];
Разница в том, что эта форма определяет «прямоугольный» массив, в котором все строки имеют одинаковую длину.
Массив строк
Вывод
Многие пути языка C работают со ссылками. Чтобы поместить строку символов в ОЗУ, вам необходимо:

  • выбрать блок RAM для массива;

  • инициализация пути.

Вы можете использовать функции распределения динамической памяти, чтобы выделить память для сохранения пути. В этом случае необходимо учитывать необходимый размер дороги.
название символа;
имя = (символ *) malloc (10);
scanf ("% 9s", имя);
Для ввода строки использовалась функция scanf (), длина вводимой строки не должна превышать 9 символов. Последний символ - «\ 0».
Вы можете использовать функцию scanf () для ввода строки. Однако функция scanf () используется для получения слова, а не строки. Если для ввода используется формат «% s», строка вводится (но не добавляется) до следующего пробела, который может быть пробелом, табуляцией или переводом строки.
Функция используется для ввода строки, включая пробелы
char * получает (char *);
или его эквивалент
символ * получает_с (символ *);
В качестве доказательства функции указатель передается в поле ввода. Функция предлагает пользователю ввести путь к массиву до того, как пользователь нажмет Enter.
Вы можете использовать предоставленную ранее функцию для вывода строк
printf ("% s", str); // указатель
или в сокращенном формате
printf (стр.);
Вы также можете использовать функцию для вывода строк
int помещает (char * s);
Печатает строку s и перемещает курсор на новую строку (в отличие от printf ()). Функцию Puts () также можно использовать для отображения строковых констант в кавычках.
Вы можете использовать функцию для ввода символов
char getchar ();
возвращает значение символа, введенного с клавиатуры. Эта функция использовалась в предыдущих примерах для приостановки окна консоли перед выполнением программы перед нажатием клавиши.
Функция вывода символов
Вы можете использовать функцию для печати символов
чар путчар (чар);
возвращает значение указанного символа и отображает данный символ в качестве доказательства.


Достарыңызбен бөлісу:
1   2   3   4   5   6




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет