ГЛАВА 11. ОБРАБОТКА ТЕКСТОВОЙ ИНФОРМАЦИИ




В предыдущих главах книги изложение материала фокусировалось на числовых типах данных. Следует указать, что платформа.NET поддерживает помимо числовых типов еще два основных типа данных: строковые и определяемые пользователем.

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

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

Символьный тип char

Символьный тип char базируется на стандартном классе Char библиотеки.NET из пространства имен System. Он является встроенным типом языка и предназначен для хранения символов в Unicode.

Таблица 11.1– Основные методы класса System.Char

Метод Пояснение
GetNumericValue Возвращает числовое значение символа, если он является цифрой, и -1 в противном случае
GetUnicodeCategory Возвращает категорию Unicodе-символа
IsControl Возвращает truе, если символ является управляющим
IsDigit Возвращает truе, если символ является десятичной цифрой
IsLetter Возвращает truе, если символ является буквой
IsLetterOrDigit Возвращает truе, если символ является буквой или цифрой
IsLower Возвращает truе, если символ задан в нижнем регистре
IsNumber Возвращает truе, если символ является числом (десятичным или шестнадцатеричным)
IsPunctuation Возвращает truе, если символ является знаком препинания
IsSeparator Возвращает truе, если символ является разделителем
IsUpper Возвращает truе, если символ записан в верхнем регистре
IsWhiteSpace Возвращает truе, если символ является пробельным (пробел,перевод строки и возврат каретки)
Раrse Преобразует строку в символ (строка должна состоять из одного символа)
ToLower Преобразует символ в нижний регистр
ТоUрреr Преобразует символ в верхний регистр
МахValuе, МinValuе Возвращают символы с максимальным и минимальным кодами (эти символы не имеют видимого представления)

Класс System.Char объединяет в себе целый ряд методов (табл. 11.1), которые позволяют намного облегчить написание программ обработки символьной информации. Набор методов этого класса позволяют распознавать символы различного назначения и выполнять над ними распространенные операции.

Массив символов

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

Пример 1. Дана строка символов s. Напечатать в алфавитном порядке: какие строчные русские буквы встречаются в этой строке.

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

Данный массив, также как и массив символов s, получен в программе (лист.1) путем преобразования строки в массив методом ToCharArray класса System.String (табл. 11.2). Естественно длина такого массива будет определяться числом 33. Анализ введенного массива s в этом случае может быть организован с помощью двух вложенных циклов.

В предложенной программе внешний цикл перебирает посимвольно буквы русского алфавита из массива р, и для его построения используется цикл с параметром. Конечное значение параметра этого цикла вычисляется в заголовке цикла с помощью функции Length(p), хотя можно было просто записать его значение явно, равное 33.

Внутренний цикл – это цикл с постусловием. Параметром его является переменная j, определяющая индекс анализируемого элемента массива s и увеличивающая свое значение в цикле с шагом +1, тем самым, обеспечивая просмотр всех его элементов (от первого до последнего).

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

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

Листинг 1

using System;

namespace ConsoleApplication3

{ class Program

{ static void Main(string[] args)

{ char[] p = "абвгдежзийклмнопрстуфхцчшщъыьэюя".ToCharArray();

Console.WriteLine();

char[] s = "мама мыла раму".ToCharArray();

for (int i = 0; i < p.Length; ++i)

{ int j = 0;

do

{ if (p[i] == s[j])

{ Console.Write(" " + s[j]);

break;

}

j++;

}

while (j < s.Length);

}

Console.Read();

}

}

}

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

Далее приведен пример, в котором при обработке массива символов использованы методы класса System.Char (лист. 2).

Пример 2. Дан массив символов. Требуется написать программу, распознающую некоторые категории символов.

Листинг 2

using System;

namespace ConsoleApplication1

{ class Program

{ static void Main(string[] args)

{ char q;

Console.WriteLine();

char[] s = "Столов 25".ToCharArray();

int j = 0;

do

{q=s[j];

if (char.IsLetter(q)) Console.Write("Буква "+q);

if (char.IsUpper(q)) Console.WriteLine(" Верхний рег.");

if (char.IsLower(q)) Console.WriteLine(" Нижний рег.");

if (char.IsSeparator(q)) Console.WriteLine("Разделитель");

if (char.IsNumber(q)) Console.WriteLine("Число "+q);

j++;

}

while (j < s.Length); }

}

}

 

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

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

Тип String

Тип string предназначен для определения и поддержки символьных строк. Самый простой способ создать объект типа string – использовать строковый литерал:

string str = "Обработка С# - строк";

Существуют и другие варианты создания строк.

Объявление без инициализации:

string s;

С помощью оператора new создается строка из пяти символов:

string s= new string(‘*‘,5);

Создание и инициализация строки из массива символов:

char[] a = {‘0’,’0’,’0’};

string v = new string(a);

Последовательность символов, составляющих строку, изменить нельзя. Это связано с тем, что строки типа string относятся к так называемым неизменяемым типам данных. Поэтому обращаться к отдельному элементу строки по индексу (например, s[i]) можно только для получения значения, но не для его изменения.

Хотя это кажется серьезным недостатком, на самом деле это не так. Это ограничение позволяет С# эффективно использовать строки. Если понадобится строка, которая должна содержать изменения уже существующей строки, то потребуется создать новую строку. Поскольку неиспользуемые строковые объекты автоматически утилизируются системой сбора мусора.

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

Для строк определены следующие операции:

- присваивание (=);

- проверка на равенство (==); (Строки равны, если имеют одинаковое количество символов и совпадают посимвольно);

- проверка на неравенство (!=);

- обращение по индексу ([ ]);

- конкатенация (сцепление) строк (+).

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

Сформулированная задача в данной постановке подобна многим другим, осуществляющим обработку элементов одномерного массива глава 8). Основное отличие данной задачи заключается в том, что в этом случае поиск требуемого элемента должен производиться не в числовом массиве, а в массиве слов. Программа представлена в листинге 3. Ее исполнительная часть содержит вложенные циклы.

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

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

Листинг 3

using System;

namespace ConsoleApplication1

{ class Program

{ static void Main(string[] args)

{ int ks,n=15;

bool pr;

string s;

string[] sl=new string[n];

Console.WriteLine("Введите количество слов в массиве: ks");

ks = Convert.ToInt32(Console.ReadLine());

for (int k=1; k<ks; k++)

{ Console.WriteLine("Введите слово массива");

sl[k]=Console.ReadLine();

}

do

{ Console.WriteLine("Введите новое слово");

s = Console.ReadLine();

pr = false;

int j = 0;

do

{ if (sl[j] == s) pr = true;

j++;

}

while ((pr == false) && (j < ks));

if (pr) Console.WriteLine("Да, такое слово есть");

else Console.WriteLine("Такого слова нет");

}

while (s!= "конец");

}

}

}

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

Для облегчения работы со строками в языке С# существует специальный класс System.String (табл. 11.2).

Таблица 11.2 – Основные элементы класса System.String

Название Тип Пояснение
     
Compare Статич. метод Сравнение двух строк в лексикографическом (алфавитном) порядке
Compare Ordinal Статич. метод Сравнение двух строк по кодам символов
CompareTo Метод Сравнение текущей строки с другой строкой
Concat Статич. метод Конкатенация строк. Метод допускает сцепление произвольного числа строк
Copy Статич. метод Создание копии строки
Empty Статич. поле Пустая строка (только для чтения)
Format Статич. метод Форматирование в соответствии с заданными спецификаторами формата
IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny Методы Определение индексов первого и последнего вхождения заданной подстроки или любого символа из заданного набора
Insert Метод Вставка подстроки в заданную позицию
Intern, IsInterned Статич. методы Возвращает ссылку на строку. Если строки нет, Intern добавляет строку во внутренний пул, IsIntern возвращает null
Join Статич. метод Слияние массива строк в единую строку. Между элементами массива вставляются разделители
Length Свойство Длина строки (количество символов)    
     
PadLeft, PadRight Методы Выравнивание строки по левому или правому краю путем вставки нужного числа пробелов
Remove Метод Удаление подстроки из заданной позиции
Replace Метод Замена всех вхождений заданной подстроки или символа новой подстрокой или символом
Split Метод Разделение строки на элементы, используя заданные разделители. Результаты помещаются в массив строк
StartsWith, EndsWith Методы Возвращает true или false в зависимости от того, начинается или заканчивается строка заданной подстрокой
Substring Метод Выделение подстроки, начиная с заданной позиции
ToCharArray Метод Преобразование строки в массив символов
ToLower, ToUpper Методы Преобразование символов строки к нижнему или верхнему регистру
Trim, Trim Start, TrimEnd Методы Удаление пробелов в начале и конце строки или только с одного ее конца (обратные по отношению к методам PadLeft и PadRight действия)

Рассмотрим пример с использованием методов этого класса.

Пример 4.

Листинг 4 – Использование методов класса System.String

using System;

namespace ConsoleApplication1

{ class Program

{ static void Main(string[] args)

{ int ks=5;

string s,s1;

string[] sl=new string[ks];

for (int k=1; k<ks; k++)

{ Console.WriteLine("Введите слово массива");

sl[k]=Console.ReadLine();

}

s = string.Join(":", sl);

Console.WriteLine(s);

s1 = s.Replace(":",",");

Console.WriteLine(s1);

s = s1.Substring(1);

Console.WriteLine(s);

s1 = s.ToUpper();

Console.WriteLine(s1);

}

}

}

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

Данная программа демонстрирует использование ряда методов класса System.String. В ней сначала вводится произвольная строка, а затем осуществляется четыре последовательных вызова различных методов класса System.String.

В операторе s = string.Join(":", sl); вызывается статический метод Join (он вызывается через имя класса) слияния массива строк sl в единую строку s, помещая между словами в строке разделитель «:».

В операторе s1=s.Replace(":",","); вызывается метод Replace, осуществляющий замену всех вхождений символа ":" новым символом, в нашем случае ",", и присваивание полученного результата строке s1.

В операторе s = s1.Substring(1); вызывается метод Substring, который возвращает подстроку из строки s1, начиная с первой позиции, отбрасывая первый символ «:» и присваивая результат строке s.

В операторе s1 = s.ToUpper(); вызывается метод ToUpper, выполняющий преобразование символов строки к верхнему регистру. Результат присваивается строке s1.

Пример 5. Дана последовательность, состоящая из 10 слов. Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность.

Листинг 5 – К примеру 5

using System;

namespace primer

{

class Program

{

static void Main(string[] args)

{/*CompareOrdinal---Сравнение двух строк по кодам символов.

* Разные реализации метода позволяют сравнивать строки и подстроки

* CompareTo----Сравнение текущего экземпляра строки с другой строкой

* 12. Дана последовательность,

* состоящая из 10 слов.

* Напечатать все различные слова,

* указав для каждого из них число его вхождений в последовательность.

*/

int col = 0;

int ks = 10;

string[] sl = new string[ks];

Console.WriteLine("Введите 10 слов ");

for (int k = 0; k < ks; k++)

{

sl[k] = Console.ReadLine();

}

Console.WriteLine("Количество вхождений");

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

{

col = 0;

for (int j = 0; j < ks; j++)

{

if (String.Compare(sl[i], sl[j]) == 0) col++;

}

Console.WriteLine(sl[i] + " Количество вхождений слова в последовательность " + col);

}

}

}

}

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

11.4 Класс StringBuilder

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

В том случае, когда строку все же необходимо изменить, для работы со строками удобно применять другой класс – класс StringBuilder. Данный класс, позволяющий изменять значение своих экземпляров, определен в пространстве имен System.Text.

При создании экземпляра обязательно использовать операцию new и конструктор, например:

StringBuilder s = new StringBuilder();

Подобная инициализация является наиболее простой – в ней отсутствуют инициализирующие параметры, которые в данном случае принимают значения по умолчанию. При этом создается пустая строка размером 16 байт.

В общем случае в конструкторе класса могут присутствовать два вида параметров. Первый вид параметров используется для инициализации строки, второй – для определения объема памяти (размера буфера), отводимой под экземпляр, например:

StringBuilder stud = new StringBuilder("student", 50);

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

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

Впрочем, один или оба параметра (как уже было сказано, и как видно из первого примера) могут отсутствовать.

В следующем примере приведен еще один вид конструктора, где задан объем памяти, выделяемой строке, и ее начальное значение. Объект инициализируется подстрокой длиной 4 символа, начиная с первого (подстрока "stud ").

StringBuilder stud = new StringBuilder("student", 1, 4, 50);

Основные элементы класса StringBuilder приведены в таблице 11.3.

Пример 6. Демонстрация использования методов класса System.Text.StringBuilder.

Листинг 6

using System;

using System.Text;

namespace ConsoleApplication1

{ class Program

{ static void Main()

{ string s;

StringBuilder w = new StringBuilder();

w.Append("снег,лед,гололед,дождь ");

Console.WriteLine(w);

w.Insert(5,"солнце,");

Console.WriteLine(w);

Console.WriteLine("Введите построку");

s=Console.ReadLine();

w.Insert(0,s);

Console.WriteLine(w);

w.Replace(",", ";");

Console.WriteLine(w);

}

}

}

 

Включив в программу строку using System.Text мы тем самым сделали доступным класс StringBuilder, определенный в его пространстве имен.

В программе объявлены две строки: s -статическая и w -динамическая. Поскольку строка w не инициализирована, то вызов метода w.Append("снег,лед,гололед,дождь") преобразует строку, поместив в нее указанную в методе строку.

Вызов метода w.Insert(5,"солнце,") обеспечивает вставку подстроки "солнце," в строку w, начиная с позиции 5.

Вызов метода w.Insert(0,s) обеспечивает вставку подстроки s (белый,) в строку w, начиная с позиции 0.

Вызов метода w.Replace(",",";") производит замену всех вхождений символа "," новым символом ";".

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

Таблица 11.3 Основные элементы класса System.Text.StringBuilder

Название Вид Описание
Append Метод Добавление в конец строки. Например: w.Append("снег") – в конец строки w добавлен текст "снег"
AppendFormat Метод Добавление форматированной строки в конец строки
Capacity Свойство Получение или установка емкости буфера. Если устанавливаемое значение меньше текущей длины строки или больше максимального, генерируется исключение ArgumentOutOfRangeException
Insert Метод Вставка подстроки в заданную позицию. Например: w.Insert(5, "солнце") – вставка подстроки "солнце", начиная с 5-ой позиции строки w
Length Свойство Длина строки (количество символов)
MaxCapacity Свойство Максимальный размер буфера
Remove Метод Удаление подстроки из заданной позиции. Например: w.Remove(i, 3) – удаление подстроки длиной 3 символа, начиная с позиции с номером i
Replace Метод Замена всех вхождений заданной подстроки или символа новой подстрокой или символом. Например: w.Replace(",", ";") – замена всех "," на ";". w.Replace(",", "") – удалит все "," без замены
ToString Метод Преобразование в строку типа string. Например: w.ToString()

Форматирование строк

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

Console.Write(" " + x[i]),

где элемент числового массива в результате неявного преобразования в строковый тип и объединения со строкой из двух пробелов выводится на экран.

А оператор

Console.WriteLine ("х={0} у={1} s={2}", х, у, s);

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

Параметры нумеруются с нуля, перед выводом они заменяются значениями со­ответствующих переменных в списке вывода: нулевой параметр заменяется значением первой переменной (в данном примере – х), первый параметр – второй переменной (в данном примере – у), второй параметр – значением переменной s.

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

В общем виде формат задается следующим образом:

{n [,m[:спецификатор_формата[число]]}

Здесь n – номер параметра. Параметр m определяет минимальную ширину поля, которое отводится под выводимое значение. Если выводимому числу достаточно меньшего количества позиций, неиспользуемые позиции заполняются пробелами. Если числу требуется больше позиций, параметр игнорируется.

Спецификатор формата(табл.11.4) используются для форматирования арифметических типов при их преобразовании в строковое представление.

Листинг 7

using System;

using System.Text;

namespace ConsoleApplication1

{ class Program

{ static void Main()

{ int k = 342;

double w=0.3456;

Console. WriteLine(k. ToString("C"));

Console. WriteLine(k. ToString("D"));

Console.WriteLine(k.ToString("e"));

Console. WriteLine(k. ToString("G"));

Console. WriteLine("{0,6:r}", w);

Console. WriteLine("{0,6:0.##}", w);

}

}

}

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

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

Таблица 11.4 – Спецификаторы формата для строк

Спецификатор Описание
С или с Вывод значений в денежном формате. По умолчанию перед выводимым значением подставляется символ доллара ($). Непосредственно после спецификатора можно задать целое число, определяющее длину дробной части
D или d Вывод целых значений. Непосредственно после спецификатора можно задать целое число, определяющее ширину поля вывода. Недостающие места заполняются нулями
Е или е Вывод значений в экспоненциальном формате. Непосредственно после спецификатора можно задать целое число, определяющее длину дробной части. Минимальная длина порядка – 3 символа
F или f Вывод значений с фиксированной точностью. Непосредственно после спецификатора можно задать целое число, определяющее длину дробной части
G или g Формат общего вида. Применяется для вывода значений с фиксированной точностью или в экспоненциальном формате в зависимости от того, какой формат требует меньшего количества позиций. Для различных типов величин по умолчанию используется разная ширина вывода, например, для single - 7 позиций, для byte и sbyte - 3, для decimal – 29
N или n Вывод значений в формате d, ddd, ddd. ddd..., то есть группы разрядов разделяются разделителями, соответствующими региональным настройкам. Непосредственно после спецификации можно задать целое число, определяющее длину дробной части
Р или р Вывод числа в процентном формате (число, умноженное на 100, после которого выводится знак %)
R или r Отмена округления числа при преобразовании в строку
X или х Вывод значений в шестнадцатеричном формате

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

Контрольные вопросы

1. Какие типы данных, помимо числовых, поддерживает платформа.NET?

2. На каком стандартном классе пространства имен System базируется символьный тип char?

3. Для чего предназначен тип char библиотеки.NET?

4. Приведите примеры основных методов класса System.Char и их использования.

5. Приведите пример программы обработки символьной информации, оперирующей массивом символов.

6. Для чего предназначен тип string?

7. Какие варианты создания строк существуют?

8. Какие операции определены для типа string?

9. Дайте характеристику и приведите примеры использования основных элементов класса System.String.

10. Можно ли с помощью возможностей класса System.String изменить последовательность символов, составляющих строку?

11. В чем преимущества использования класса System.Text.StringBuilder по сравнению с классом System.String?

12. Дайте характеристику и определите возможности использования основных элементов класса System.Text.StringBuilder, приведите примеры их использования в программах.

13. Что такое форматный вывод, каковы его преимущества?

14. Приведите общий вид формата строк. Для чего используются и что собой представляют спецификаторы формата?

15. Приведите примеры форматного вывода информации.

Варианты заданий для самостоятельной работы

1. Дана строка, состоящая из 10 слов. Напечатать эту же последователь­ность слов, но в обратном порядке.

2. Дана строка, состоящая из 10 слов. Напечатать эту же последователь­ность слов, но в алфавитном порядке.

3. Дана строка, состоящая из 10 слов. Напечатать те слова последовательности, у которых буквы упорядочены по алфавиту.

4. Дана строка, состоящая из 10 слов. Напечатать те слова последовательности, которые симметричны.

5. Дана последовательность, состоящая из 10 слов. Напечатать те слова последовательности, в которых первая буква слова входит в него еще раз.

6. Дана последовательность, состоящая из 10 слов. Напечатать слова последовательности, предварительно преобразовав каждое из них по следующему правилу: перенести первую букву в конец слова.

7. Дана последовательность, состоящая из 10 слов. Напечатать все слова последовательности, предварительно удалив из слов все последующие вхождения первой буквы данного слова.

8. Дана последовательность, состоящая из 10 слов. Напечатать все слова последовательности, удалив из каждого слова все нечетные буквы.

9. Дана последовательность, состоящая из 10 слов. Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность.

10. Дано предложение, состоящее не менее из 10 слов. Напечатать текст, состоящий из последних букв всех слов предложения.

11. Дана строка. Подсчитать количество букв k в последнем ее слове.

12. Дано предложение, состоящее не менее из 10 слов. Напечатать все слова из предложения, содержащие ровно две буквы d.

13. Дана строка, содержащая английский текст. Найти количество слов, начинающихся с буквы b.

14. Дана строка, содержащая текст. Найти длину самого короткого слова и самого длинного слова.

15. Дана строка, содержащая текст. Вывести на экран слова, содержащие пять букв.

16. Дана строка. Преобразовать ее, удалив каждый символ «*» и повторив каждый символ, отличный от «*».

17. Дана строка. Подсчитать самую длинную последовательность подряд идущих букв а.

18. Упорядочить строку английских слов по алфавиту.

19. Дана строка символов, среди которых есть одна открывающаяся и одна закрывающаяся скобка. Вывести на экран все символы, расположенные внутри этих скобок.

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

21. Дан набор слов, разделенных точкой с запятой «;». Определить, сколько в нем слов, заканчивающихся буквой а.

22. Дана строка. Вывести на экран все слова, которые содержат хотя бы одну букву k.

23. Дана строка. Найти в ней те слова, которые начинаются и оканчиваются одной и той же буквой.

24. В строке заменить все двоеточия «:» точкой с запятой «;». Подсчитать количество замен.

25. В строке удалить символ двоеточие «:» и подсчитать количество удаленных символов.

26. Удалить часть символьной строки, заключенной в скобки (вместе со скобками).

27. Определить, сколько раз в строке встречается заданное слово.

28. В строке имеется одна точка с запятой «;». Посчитать количество символов до точки с запятой и после нее.

29. Строка содержит одно слово. Проверить, будет ли оно читаться одинаково справа налево и слева направо (является ли оно палиндромом).

30. В записке слова зашифрованы - каждое из них записано наоборот. Расшифровать сообщение.

31. Проверить, одинаковое ли число открывающихся и закрывающихся скобок в данной строке.

32. Из данной символьной строки выбрать те символы, которые встречаются в ней только один раз.

33. Строка содержит произвольный русский текст. Проверить, каких букв в нем больше: гласных или согласных.

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

35. Двумерный массив содержит некоторые буквы русского алфавита, расположенные в произвольном порядке. Написать программу, проверяющую, можно ли из этих букв составить данное слово S. Каждая буква массива используется не более одного раза.

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

37. Дана строка, содержащая текст на русском языке. Выяснить, входит ли данное слово в указанный текст, и если да, то сколько раз.

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

39. Дана строка, содержащая текст на русском языке. Определить, сколько раз встречается в ней самое длинное слово.

40. Дана строка, содержащая текст на русском языке. Составить в алфавитном порядке список всех слов, встречающихся в этом тексте.

41. Дана строка, содержащая текст на русском языке. Определить, сколько раз встречается в нем самое короткое слово.

42. Дана строка, содержащая текст на русском языке и некоторая буква. Найти слово, содержащее наибольшее количество указанной буквы.

43. Дана строка, содержащая текст на русском языке и некоторая буква. Подсчитать, сколько слов начинается с указанной буквы.

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

45. Дана строка, содержащая текст, включающий русские и латинские слова. Подсчитать, каких слов в тексте больше – русских или латинских.

46. Дана строка, содержащая текст. Сколько слов в тексте? Сколько цифр в тексте? Сколько букв в тексте? Сколько символов в тексте?

47. Дана строка. Удалить из нее все лишние пробелы, оставив между словами не более одного. Результат поместить в новую строку.

48. Дана строка и некоторое слово. Напечатать те предложения строки, которые содержат данное слово более двух раз.

49. Дана строка. Напечатать в алфавитном порядке все слова из данной строки, имеющие заданную длину n.

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: