что такое символьные строки

Что такое символьные строки

Символьные строки хранят такую информацию, как имена файлов, названия книг, имена служащих и другие символьные сочетания. Большинство программ на C++ широко используют символьные строки. Далее вы узнаете, что в C++ символьные строки хранятся в массиве типа char, который заканчивается символом NULL (или ASCII 0). В данном уроке символьные строки рассматриваются более подробно. Вы узнаете, как хранить и обрабатывать символьные строки, а также как использовать функции библиотеки этапа выполнения, которые манипулируют символьными строками. К концу этого урока вы освоите следующие основные концепции:

Программы на C++ хранят символьные строки как массив типа char. Большинство программ широко используют символьные строки. Экспериментируйте с каждой программой, представленной в этом уроке, чтобы освоиться с символьными строками. Вы обнаружите, что работа с символьными строками подобна работе с массивами, описанной в уроке 16.

ОБЪЯВЛЕНИЕ СИМВОЛЬНЫХ СТРОК В ПРОГРАММАХ

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

Для объявления символьной строки внутри программы просто объявите массив типа char с количеством элементов, достаточным для хранения требуемых символов. Например, следующее объявление создает переменную символьной строки с именем filename, способную хранить 64 символа (не забывайте, что символ NULL является одним из этих 64 символов):

Как видно из рис. 17.1, это объявление создает массив с элементами, индексируемыми от filename[0] до filename[63].

что такое символьные строки. p17 1. что такое символьные строки фото. что такое символьные строки-p17 1. картинка что такое символьные строки. картинка p17 1. Символьные строки хранят такую информацию, как имена файлов, названия книг, имена служащих и другие символьные сочетания. Большинство программ на C++ широко используют символьные строки. Далее вы узнаете, что в C++ символьные строки хранятся в массиве типа char, который заканчивается символом NULL (или ASCII 0). В данном уроке символьные строки рассматриваются более подробно. Вы узнаете, как хранить и обрабатывать символьные строки, а также как использовать функции библиотеки этапа выполнения, которые манипулируют символьными строками. К концу этого урока вы освоите следующие основные концепции:

Рис. 17.1. C++ трактует символьную строку как массив типа char.

Главное различие между символьными строками и другими типами массивов заключается в том, как C++ указывает последний элемент массива, Как вы уже знаете, программы на C++ представляют конец символьной строки с помощью символа NULL, который в C++ изображается как специальный символ ‘\0’. Когда вы присваиваете символы символьной строке, вы должны поместить символ NULL (‘\0’) после последнего символа в строке. Например, следующая программа ALPHABET. CPP присваивает буквы от А до Я переменной alphabet, используя цикл for. Затем программа добавляет символ NULL в эту переменную и выводит ее с помощью cout.

<
char alphabet [34]; // 33 буквы плюс NULL char letter;
int index;
for (letter = ‘A’, index = 0; letter letter++, index++) alphabet[index] = letter;
alphabet[index] = NULL;
cout » >

Как видите, программа присваивает строке символ NULL, чтобы указать последний символ строки:

Когда выходной поток cout выводит символьную строку, он по одному выводит символы строки, пока не встретит символ NULL. Короче говоря, cимвол NULL указывает программе последний символ в строке.

Обратите внимание на цикл for, который появляется в предыдущей программе. Как видите, цикл инициализирует и увеличивает две переменные (letter и index). Когда цикл for инициализирует или увеличивает несколько переменных, разделяйте операции запятой (запятая тоже является оператором C++):

C++ автоматически добавляет NULL к строковым константам

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

При создании символьной строковой константы компилятор C++ автоматически добавляет символ NULL, как показано на рис. 17.2.

что такое символьные строки. p17 2. что такое символьные строки фото. что такое символьные строки-p17 2. картинка что такое символьные строки. картинка p17 2. Символьные строки хранят такую информацию, как имена файлов, названия книг, имена служащих и другие символьные сочетания. Большинство программ на C++ широко используют символьные строки. Далее вы узнаете, что в C++ символьные строки хранятся в массиве типа char, который заканчивается символом NULL (или ASCII 0). В данном уроке символьные строки рассматриваются более подробно. Вы узнаете, как хранить и обрабатывать символьные строки, а также как использовать функции библиотеки этапа выполнения, которые манипулируют символьными строками. К концу этого урока вы освоите следующие основные концепции:

Рис. 17.2. Компилятор C++ автоматически добавляет символ NULL к строковым константам.

Когда ваши программы выводят символьные строковые константы с помощью выходного потока cout, cout использует символ NULL (который компилятор добавляет к строке) для определения последнего символа вывода.

Символьная строка представляет собой массив символов, за которыми следует символ NULL (‘\0’). При объявлении символьной строки вы объявляете массив типа char. Когда программа позднее присваивает символы строке, она отвечает за добавление символа NULL, который представляет конец строки.

Если вы используете строковые константы, заключенные в двойные кавычки, компилятор C++ автоматически добавляет символ NULL. Большинство функций C++ используют символ NULL для определения последнего символа строки.

Следующая программа LOOPNULL.CPP слегка изменяет предыдущую программу, используя цикл for для вывода содержимого строки:

<
char alphabet[34]; //33 символа плюс NULL char letter;
int index;
for (letter = ‘A’, index = 0; letter index++) alphabet[index] = letter;
alphabet[index] = NULL;
for (index = 0; alphabet[index] 1= NULL; index++) cout cout >

Как видите, цикл for по одному исследует символы строки. Если символ не NULL (не последний символ строки), цикл выводит символ, увеличивает индекс, и процесс продолжается.

Как ‘А’ отличается от «А»

При рассмотрении программ на C++ вы можете встретить символы, заключенные в одинарные кавычки (например, ‘А’) и символы, заключенные в

что такое символьные строки. p17 3. что такое символьные строки фото. что такое символьные строки-p17 3. картинка что такое символьные строки. картинка p17 3. Символьные строки хранят такую информацию, как имена файлов, названия книг, имена служащих и другие символьные сочетания. Большинство программ на C++ широко используют символьные строки. Далее вы узнаете, что в C++ символьные строки хранятся в массиве типа char, который заканчивается символом NULL (или ASCII 0). В данном уроке символьные строки рассматриваются более подробно. Вы узнаете, как хранить и обрабатывать символьные строки, а также как использовать функции библиотеки этапа выполнения, которые манипулируют символьными строками. К концу этого урока вы освоите следующие основные концепции:

Рис. 17.3. Как компилятор C++ хранит символьную константу ‘А’ и строковую константу «А».

двойные кавычки («А»). Символ внутри одинарных кавычек представляет собой символьную константу. Компилятор C++ выделяет только один байт памяти для хранения символьной константы. Однако символ в двойных кавычках представляет собой строковую константу — указанный символ и символ NULL (добавляемый компилятором). Таким образом, компилятор будет выделять два байта для символьной строки. Рисунок 17.3 иллюстрирует, как компилятор C++ хранит символьную константу ‘А’ и строковую константу «А».

ИНИЦИАЛИЗАЦИЯ СИМВОЛЬНОЙ СТРОКИ

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

char title[64] = «Учимся программировать на языке C++»;

Если количество символов, присваиваемое строке, меньше размера массива, большинство компиляторов C++ будут присваивать символы NULL остающимся элементам строкового массива. Как и в случае с массивами других типов, если вы не указываете размер массива, который инициализируете при объявлении, компилятор C++ распределит достаточно памяти для размещения указанных букв и символа NULL:

char title[] = «Учимся программировать на языке C++»;

Следующая программа INIT_STR.CPP инициализирует символьную строку при объявлении:

<
char title[64] = «Учимся программировать на языке C++»;
char lesson[64] = «Символьные строки»;
cout cout » >

Некоторые программы, представленные в оставшейся части книги, будут инициализировать символьные строки подобным способом. Найдите время для эксперимента с этой программой, изменяя символы, присваиваемые каждой строке.

ПЕРЕДАЧА СТРОК В ФУНКЦИИ

Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (char) и левую и правую скобки массива. Вам не надо указывать размер строки. Например, следующая программа SHOW_STR.CPP использует функцию show_string для вывода символьной строки на экран:

void show_string(char string[])

<
show_string(«Привет, C++!»);
show_string(«Учусь программировать на C++»);
>

Как видите, функция show_string трактует параметр символьной строки как массив:

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

Как вы уже знаете, функции C++ часто используют символ NULL для определения конца строки. Следующая программа STR_LEN.CPP создает функцию с именем string_length, которая ищет символ NULL в строке для определения количества символов, содержащихся в строке. Далее функция использует оператор return для возврата длины строки вызвавшей функции. Программа передает несколько различных символьных строк в функцию, отображая длину каждой из них на экране:

int string_length(char string[])

<
char title[] = «Учимся программировать на языке C++»;
char lesson[] = «Символьные строки»;
cout » » cout » » >

Как видите, функция запускается с первого символа строки (элемент 0) и затем исследует каждый элемент до тех пор, пока не встретит NULL. Рассматривая программы на C++, вы встретите целый ряд функций, которые подобным образом просматривают символьные строки в поисках символа NULL.

ПРЕИМУЩЕСТВА ТОГО, ЧТО NULL ПРЕДСТАВЛЯЕТ СОБОЙ ASCII 0

Как вы уже знаете, символ NULL представляет собой символ ASCII 0. В уроке 7 вы изучали, что C++ использует значение 0, чтобы представлять ложь. Таким образом, поскольку символ NULL равен 0, ваши программы могут упростить многие операции цикла. Например, многие функции просматривают символьные строки символ за символом в поиске NULL. Следующий цикл for иллюстрирует, как программа может искать NULL в строке:

Поскольку символ NULL равен 0, многие программы упрощают циклы, которые ищут NULL, как показано ниже:

В данном случае пока символ, содержащийся в string[index] не NULL (0 или ложь), цикл продолжается.

ИСПОЛЬЗОВАНИЕ СТРОКОВЫХ ФУНКЦИЙ БИБЛИОТЕКИ ЭТАПА ВЫПОЛНЕНИЯ

Из урока 11 вы узнали, что большинство компиляторов C++ обеспечивает обширный набор функций, называемых библиотекой этапа выполнения. Рассматривая библиотеку этапа выполнения, вы обнаружите, что она содержат много разных функций, манипулирующих строками. Например, функция strupr преобразует символьную строку в строку верхнего регистра. Подобно этому, функция strlen возвращает количество символов в строке. Большинство библиотек этапа выполнения обеспечивают даже функции, которые позволяют вам просматривать строки в поисках определенного символа. Например, следующая программа STRUPR.CPP иллюстрирует использование функций strupr и strlwr библиотеки этапа выполнения:

#include // Содержит прототипы
// функций strupr и strlwr

void main(void)
<
char title[] = «Учимся программировать на языке C++»;
char lesson[] = «Символьные строки»;
cout » cout » >

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

Вы должны играть по правилам

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

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Большинство программ на C++ широко использует символьные строки. Из этого урока вы узнали, как работать со строками. Из урока 18 вы узнаете, как сохранять связанную информацию различных типов в переменных, представляющих структуры C++. Используя структуру, вы можете хранить всю информацию о служащем, например его фамилию, возраст, оклад и номер телефона, в одной переменной. Однако, прежде чем приступить к уроку 18, убедитесь, что освоили следующие основные концепции:

Источник

Что такое символьные строки

Любой язык программирования содержит средства представления и обработки текстовой информации. Другое дело, что обычно программист наряду с символами имеет дело с типом данных (формой представления) – строкой, причем особенности ее организации скрыты, а для работы предоставлен стандартный набор функций. В Си, наоборот, форма представления строки является открытой, а программист работает с ней «на низком уровне».

Представление символов и строк в Си

Примечание. Исторически сложившееся «рыночное разнообразие» на момент появления стандарта привело к тому, что имеются несколько кодовых таблиц, представляющих кириллицу:

· работа с текстовыми файлами «вписана» в стандартный ввод-вывод. Например, в Си потоки ввода-вывода могут быть перенаправлены как на текстовый файл, так и на консольный ввод-вывод (клавиатура – экран);

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

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

Константа Название Действие

\ a bel Звуковой сигнал

\b bs Курсор на одну позицию назад

\f ff Переход к началу (перевод формата)

\n lf Переход на одну строку вниз(перевод строки)

\r cr Возврат на первую позицию строки

\ t ht Переход к позиции, кратной 8 (табуляция)

\v vt Вертикальная табуляция по строкам

\nn Символ с восьмеричным кодом nn

\xnn Символ с шестнадцатеричным кодом nn

\0 Символ с кодом 0

Некоторые программы и стандартные функции обработки символов и строк (isdigit,isalpha) используют тот факт, что цифры, прописные и строчные (маленькие и большие) латинские буквы имеют упорядоченные по возрастанию значения кодов:

· строка хранится в массиве символов, массив символов может быть инициализирован строкой, а может быть заполнен программно:

· соответствие размерности массива и длины строки транслятором не контролируется, за это несет ответственность программа (программист, ее написавший):

char C[20], B []=”Строка слишком длинная для C ”;

// следить за переполнением массива

// и ограничить строку его размерностью

char A[80] = «123456\r\n»;

char B[] = «aaaaa\033bbbb»;

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

Стандартные приемы обработки строк

· редактировать строку «на месте», реализуя вставку и удаление символов или фрагментов;

· организовать посимвольное переписывание входной строки в выходную, с копированием нужных и преобразованных фрагментов (что проще).

Получить символ десятичной цифры из значения целой переменной, лежащей в диапазоне 0..9:

int n; char c; c = n + ‘0’;

Получить символ шестнадцатеричной цифры из значения целой переменной, лежащей в диапазоне 0..15:

Получить значение целой переменной из символа десятичной цифры:

Получить значение целой переменной из шестнадцатеричной цифры:

Преобразовать маленькую латинскую букву в большую:

//— Подсчет количества слов

//— Удаление лишних пробелов при посимвольном переписывании

void nospace(char c1[],char c2[]) <

c 2[ j ++]=’ ‘; // добавить пробел

c 2[ j ++]= c 1[ i ]; // Перенести символ слова

//—- Сравнение строк по значениям кодов

int my_strcmp(unsigned char s1[],unsigned char s2[]) <

if (s1[n] == s2[n]) return 0;

//—- Сравнение строк с заданными «весами» символов

static char ORD[] = » АаБбВвГгДдЕе 1234567890″;

for ( int n=0; ORD[n]!=’\0′; n++)

int my_strcmp(char s1[],char s2[])<

if (c1 == c2) return 0;

Пример: a < b < c >b > a < d < e < g >e > d > a => < c >< b 1 b >< g >< e 3 e > < d 4 d >a 2 a 5 a

Задачу будем решать по частям. Несомненно, нам потребуется функция, которая ищет открывающуюся скобку для самого внутреннего вложенного фрагмента. Имея ее, можно организовать уже известное нам переписывание и «выкусывание». Основная идея алгоритма поиска состоит в использовании переменной-счетчика, которая увеличивает свое значение на 1 на каждую из открывающихся скобок и уменьшает на 1 на каждую из закрывающихся. При этом фиксируется максимальное значение счетчика и позиция элемента, где это происходит.

int i; // Индекс в строке

int k ; // Счетчик вложенности

int max ; // Максимум вложенности

int b; // Индекс максимальной » <"

for (i=0, max=0, b=-1; c[i]!=0; i++)<

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

int i; // Индекс в строке

int b; // Индекс максимальной » <"

Идея основного алгоритма заключается в последовательной нумерации «выкусываемых» из входной строки фрагментов, при этом на место каждого помещается его номер – значение счетчика, которое для этого переводится во внешнюю форму представления.

//—— Копирование вложенных фрагментов с » выкусыванием»

void copy(char c1[], char c2[])<

int i =0; // Индекс в выходной строке

int k ; // Индекс найденного фрагмента

int n ; // Запоминание начала фрагмента

int m ; // Счетчик фрагментов

for ( n = k ; c 1[ k ]!= ‘>’ ; k ++, i ++) c 2[ i ]= c 1[ k ]; // Переписать фрагмент и его «>»

if ( m /10!=0) c 1[ n ++] = m /10 + ‘0’ ; // На его место две цифры

c 1[ n ++] = m %10 + ‘0’ ; // номера во внешней форме

c 1[ n ]=0; > // сдвинуть » хвост» к началу

for ( k =0; c 1[ k ]!=0; k ++, i ++) c 2[ i ]= c 1[ k ]; // перенести остаток

c 2[ i ]=0;> // входной строки

Практический совет – желательно избегать сложные вычисления над индексами. Лучше всего для каждого фрагмента строки заводить свой индекс и перемещать их независимо друг от друга в нужные моменты. Что, например, сделано при «уплотнении» строки – индекс k после переписывания найденного фрагмента «останавливается» на начале «хвоста» строки, который переносится под индекс n – начало удаляемого фрагмента. Причем записываемые цифры номера смещают это начало на один или два символа. Таким образом, фрагмент заменяется во входной строке на его номер.

что такое символьные строки. 044 01. что такое символьные строки фото. что такое символьные строки-044 01. картинка что такое символьные строки. картинка 044 01. Символьные строки хранят такую информацию, как имена файлов, названия книг, имена служащих и другие символьные сочетания. Большинство программ на C++ широко используют символьные строки. Далее вы узнаете, что в C++ символьные строки хранятся в массиве типа char, который заканчивается символом NULL (или ASCII 0). В данном уроке символьные строки рассматриваются более подробно. Вы узнаете, как хранить и обрабатывать символьные строки, а также как использовать функции библиотеки этапа выполнения, которые манипулируют символьными строками. К концу этого урока вы освоите следующие основные концепции:

Внешняя и внутренняя форма представления чисел

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

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

что такое символьные строки. 044 02. что такое символьные строки фото. что такое символьные строки-044 02. картинка что такое символьные строки. картинка 044 02. Символьные строки хранят такую информацию, как имена файлов, названия книг, имена служащих и другие символьные сочетания. Большинство программ на C++ широко используют символьные строки. Далее вы узнаете, что в C++ символьные строки хранятся в массиве типа char, который заканчивается символом NULL (или ASCII 0). В данном уроке символьные строки рассматриваются более подробно. Вы узнаете, как хранить и обрабатывать символьные строки, а также как использовать функции библиотеки этапа выполнения, которые манипулируют символьными строками. К концу этого урока вы освоите следующие основные концепции:

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

На самом деле алгоритмы ввода-вывода числовых данных (вернее, преобразования данных из внешней формы во внутреннюю, и наоборот) идентичны алгоритмам преобразования чисел из произвольной системы счисления в десятичную (см. 1.3). При этом десятичная система играет роль внутренней («родной») формы представления.

Ввод целого числа сопровождается его преобразованием из внешней формы – последовательности цифр – в внутренней – целой переменной, которая «интегрирует» цифры в одно значение с учетом их веса (что зависит, кроме всего прочего, и от системы счисления, в которой представлено вводимое число). В преобразовании используется тот факт, что при добавлении к числу очередной цифры справа старое значение увеличивается в 10 раз и к нему добавляется значение новой цифры, например:

Значение: 123 1234 = 123 * 10 + 4

Тогда в основу алгоритма может быть положен цикл просмотра всех цифр числа слева направо, в котором значение числа на текущем шаге цикла получается умножением на 10 результата предыдущего цикла и добавлением значения очередной цифры:

//—— Ввод десятичного целого числа

int StringToInt(char c[])<

if (c[i]==’\0′) return 0; // Поиск первой цифры

for (n=0; c[i]>=’0′ && c[i] // Накопление целого

//—- Вывод целого десятичного числа

void IntToString(char c[], int n)

for (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 (точнее, на основание системы счисления) очередная цифра «вылезает» в целую часть. Из нее формируется символ, после чего целая часть отбрасывается.

//—- Вывод вещественного десятичного числа

void FloatToString(char c[], double v)

for (nn=v, k=0; nn!=0; k++, nn/=10); // Подсчет количества цифр

kk=k-1; c[k++] = ‘.’; // целой части числа

for (nn=v; kk >=0; kk—, nn /= 10) // Получение цифр числа

c[kk] = nn % 10 + ‘0’; // в обратном порядке

v-=(int)v; // Убрать целую часть

Фрагменты вывода целой и дробной частей «сшиваются» путем запоминания местонахождения в строке символа «точка», разделяющего целую и дробную части.

//—— Ввод десятичного вещественного числа

double StringToFloat(char c[])<

if (c[i]==’\0′) return 0; // Поиск первой цифры

for (n=0; c[i]>=’0′ && c[i] // Накопление целого

v=v/10; // весом разряда дробной части

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

Посимвольная и пословная обработка.

Одну и ту же программу обработки строки текста можно написать разными способами. Если речь идет о формате текстовой строки, то отслеживать его можно двумя способами (см. 3.8):

// Функция возвращает индекс начала слова или 1, если нет слов

// Логика переменной состояния – n – счетчик символов слова

if (s[i]!=’ ‘) n++; // символ слова увеличить счетчик

n=0; // фиксация максимального значения

>> // то же самое для последнего слова

// Структурная логика – 3 цикла: просмотр слов, пробелов и символов

while (in[i]==’ ‘) i++; // Пропуск пробелов перед словом

for (k=0;in[i]!=’ ‘ && in[i]!=0; i++,k++); // Подсчет длины слова

m=k; b=i-k; > // Одновременно запоминается

По завершении посимвольного просмотра строки последнее слово (если после него нет пробела) оказывается необработанным. Поэтому контекст фиксации максимума повторяется после выхода из цикла.

Здесь можно проиллюстрировать еще один принцип разработки программ: после ее написания для произвольной «усредненной» ситуации необходимо проверить ее «на крайности». В данном случае, при отсутствии в строке слов (строка состоит из пробелов или пуста), установленное начальное значение b =-1 будет возвращено в качестве результата (что и задумывалось при установке значения –1 как недопустимого).

Лабораторный практикум

1. В строке найти последовательности цифр, каждую из них считать числом в той системе счисления, которая соответствует максимальной цифре, заменить числа в строке символами с кодами, полученными из этих чисел. Пример: aaa 010101 bbb 343 ccc – двоичная и пятиричная системы счисления.

2. В строке найти последовательности цифр, каждую из них считать числом в той системе счисления, которая соответствует первой цифре, заменить числа в строке символами с кодами, полученными из этих чисел. Пример: aaa 2010101 bbb 8343 ccc – двоичная и восьмиричная системы счисления.

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

7. Найти во входной строке самую внутреннюю пару скобок <. >и переписать в выходную строку содержащиеся между ними символы. Во входной строке фрагмент удаляется. Повторять этот процесс, пока во входной строке не останется скобок, остаток также переписать в выходную строку.

10. Определить, является ли строка палиандромом (например, «я у ребят беру наган») – удалить пробелы, найти фрагменты – палиандромы максимальной длины и удалить.

Вопросы без ответов

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *