Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Малыхина. Массивы....doc
Скачиваний:
22
Добавлен:
22.05.2015
Размер:
502.27 Кб
Скачать

11.3 Тип 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

Название

Тип

Пояснение

1

2

3

Compare

Статич. метод

Сравнение двух строк в лексикографическом (алфавитном) порядке

Compare

Ordinal

Статич. метод

Сравнение двух строк по кодам символов

CompareTo

Метод

Сравнение текущей строки с другой строкой

Concat

Статич. метод

Конкатенация строк. Метод допускает сцепление произвольного числа строк

Copy

Статич. метод

Создание копии строки

Empty

Статич. поле

Пустая строка (только для чтения)

Format

Статич. метод

Форматирование в соответствии с заданными спецификаторами формата

IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny

Методы

Определение индексов первого и последнего вхождения заданной подстроки или любого символа из заданного набора

Insert

Метод

Вставка подстроки в заданную позицию

Intern, IsInterned

Статич. методы

Возвращает ссылку на строку. Если строки нет, Intern добавляет строку во внутренний пул, IsIntern возвращает null

Join

Статич. метод

Слияние массива строк в единую строку. Между элементами массива вставляются разделители

Length

Свойство

Длина строки (количество символов)

1

2

3

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);

}

}

}

}

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