Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Другие элементы меню 9 страница




public static void PrintArObj(string name,object[] A)

{

Console.WriteLine(name);

foreach (object item in A)

Console.Write("\t {0}", item);

Console.WriteLine();

}// PrintArObj

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

public void TestMas()

{

string [] winames = {"Т. Хоар", "Н. Вирт", "Э. Дейкстра"};

Arrs.PrintArObj("winames", winames);

object [] cur = new object [5];

cur = winames;

Arrs.PrintArObj("cur", cur);

winames = (string [])cur;

Arrs.PrintArObj("winames", winames);

}// TestMas

Взгляните на результаты работы этой процедуры:

Рис. 12.6. Семантика присваивания и преобразования массивов

Приступая к описаниям массивов, я полагал, что 10 страниц одной лекции будет вполне достаточно. Оказалось, что массивы C# более интересны. Надеюсь, с этим согласятся и читатели.

Вариант 1

31. Пусть x – объект класса int[]. В вызове x.M роль M может играть:

q метод Sort;

q свойство Length;

q метод GetLength;

q метод Copy;

q метод CopyTo.

32. Отметьте истинные высказывания:

q все классы-массивы являются прямыми потомками только одного родительского класса;

q все классы-массивы наследуют свойства и методы двух классов и четырех интерфейсов;

q метод Sort позволяет сортировать любые массивы;

q если S и T принадлежат разным классам – массивам, то присваивание S=T недопустимо.

33. Пусть процедура ItWorks имеет следующий заголовок:
public void ItWorks(object[] A)
Какой массив может быть передан ей в качестве аргумента:

q int[] x;

q int [][] y;

q string[] s;

q Person[] p; (Person – класс, определенный пользователем;

q Anketa[] a; (Anketa – структура, определенная пользователем.

Вариант 2

35. Пусть массив x принадлежит классу double[][]. В вызове x.M роль M может играть:

q метод Sort;

q свойство Length;

q метод GetLength;

q метод Copy;

q метод CopyTo.

36. Отметьте истинные высказывания:

q все классы-массивы являются потомками класса Array;

q в цикле For Each допустимо только чтение элементов массива;

q между классами-массивами и классом object[] существуют взаимные неявные преобразования;

q все статические методы класса Array определены только над одномерными массивами.

37. Пусть процедура ItWorks имеет следующий заголовок:
public void ItWorks(Array A)
Какой массив может быть передан ей в качестве аргумента:

q int[] x;

q int [][] y;

q string[] s;

q Person[] p; (Person – класс, определенный пользователем;

q Anketa[] a; (Anketa – структура, определенная пользователем.

Вариант 3

32. К статическим свойствам и методам класса Array относятся:

q метод Reverse;

q свойство Length;

q метод BinarySearch;

q метод Copy;

q метод CopyTo.

33. Отметьте истинные высказывания:

q работа с массивом как с коллекцией возможна благодаря наследованию интерфейса IList;

q класс Array является потомком класса Object;

q свойство Length и метод GetLength всегда возвращают один и тот же результат;

q если S и T массивы ссылочного типа, то между ними существует взаимное преобразование;

q в результате присваивания S=T, где S и T массивы, создается копия массива T.

34. Пусть процедура ItWorks имеет следующий заголовок:
public void ItWorks(int[] A)
Какой массив может быть передан ей в качестве аргумента:

q int[] x;

q byte[] y;

q string[] s;

q Person[] p; (Person – класс, определенный пользователем).

 

 

Лекция 13. Символы и строки постоянной длины в C#

Общий взгляд. Строки в C++. Строки в C#. Строки постоянной и переменной длины. Классы char, char[].

Ключевые слова: строки С; символьный класс char; класс char[]; строки постоянной длины; тип char*

Общий взгляд

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

отдельные символы, чаще всего, его называют типом char;

строки постоянной длины, часто они представляются массивом символов;

строки переменной длины – это, как правило, тип string, соответствующий современному представлению о строковом типе.

Символьный тип char, представляющий частный случай строк длиной 1, полезен во многих задачах. Основные операции над строками это разбор и сборка. При их выполнении приходится, чаще всего, доходить до каждого символа строки. В языке Паскаль, где был введен тип char, сам строковый тип рассматривался, как char[] –массив символов. При таком подходе получение i-го символа строки становится такой же простой операцией, как и получение i-го элемента массива, следовательно, эффективно реализуются обычные операции над строками – определение вхождения одной строки в другую, выделение подстроки, замена символов строки. Однако заметьте, представление строки массивом символов хорошо только для строк постоянной длины. Массив не приспособлен к изменению его размеров, вставки или удалению символов (подстрок).

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

Строки С++

В языке С++ есть все виды строк. Символьный тип char используется для задания отдельных символов. Для строк постоянной длины можно использовать массив символов – char[]. Особенностью, характерной для языка С++, точнее для языка С, является завершение строки символом с нулевым кодом. Строки, завершаемые нулем, называются обычно строками С. Массив char[], задает строку С, и потому должен иметь размер, по крайней мере, на единичку больше фактического размера строки. Вот пример объявления подобных строк в С++:

//Массивы и строки
char strM1[] = "Hello, World!";
char strM2[20] = "Yes";

Массив strM1 состоит из 14 символов, массив strM2 из 20, но его четвертый символ имеет код 0, сигнализирующий о фактическом конце строки.

Другой способ задания строк С, заканчивающихся нулем, состоит в использовании типизированного указателя – char*.

//Строки, заданные указателем char*
char* strPM1 ="Hello, World!";
char* strPM2;

Два типа char[] и char* допускают взаимные преобразования. Не могу удержаться, чтобы не привести процедуру копирования строк, соответствующую духу и стилю С++:

void mycpy(char* p, const char* q)
{
while(*p++ = *q++);
}

Эта процедура копирует содержимое строки q в строку p. В этой короткой программе, в которой кроме условия цикла while ничего больше нет, фактически используются многие средства языка С++ – разыменование указателей, адресная арифметика, присваивание как операция, завершение строки нулем, логическая интерпретация значений. Раз уж привел эту программу, то поясню, как она работает. Вначале указатель q задает адрес начала строки, поэтому разыменование *q задает первый символ копируемой строки. Это значение присваивается первому символу строки p. Суффиксные операции p++ и q++ увеличивают значение указателей на 1, но поскольку используется адресная арифметика, то в результате вычисляется адрес, задающий следующий символ соответствующих строк, и процесс копирования продолжается. При достижении последнего символа строки q, – символа с кодом нуль, он также будет скопирован в строку p. Но впервые в этот момент выражение присваивание вернет в качестве значения результат 0, который будет проинтерпретирован в условии цикла while, как false, и цикл завершит свою работу. Строка будет скопирована.

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

Тип string не является частью языка С++, но входит в библиотеку, определяемую стандартом языка. Стандартные библиотеки, по сути, являются продолжением языка. Тип (класс) string обеспечивает работу со строками переменной длины и поддерживает многие полезные операции над строками.

Строки С#

Давайте разберемся, как устроены строки C#, и что взято из языка С++.

Класс char

В C# есть символьный класс char, основанный на классе System.Char, использующий двухбайтную кодировку Unicode для представления символов. Для этого типа в языке определены символьные константы – символьные литералы. Константу можно задавать:

символом, заключенным в одинарные кавычки;

escape-последовательностью, задающей код символа;

Unicode-последовательностью, задающей Unicode код символа.

Вот несколько примеров объявления символьных переменных и работы с ними:

public void TestChar()

{

char ch1='A', ch2 ='\x5A', ch3='\u0058';

char ch = new Char();

int code; string s;

ch = ch1;

//преобразование символьного типа в тип int

code = ch; ch1=(char) (code +1);

//преобразование символьного типа в строку

//s = ch;

s = ch1.ToString()+ch2.ToString()+ch3.ToString();

Console.WriteLine("s= {0}, ch= {1}, code = {2}",

s, ch, code);

}// TestChar

Три символьные переменные инициализированы константами, значения которых заданы тремя разными способами. Переменная ch объявляется в объектном стиле, используя new и вызов конструктора класса. Тип char как и все типы C# является классом. Этот класс наследует свойства и методы класса object и имеет большое число собственных методов.

Существуют ли преобразования между классом char и другими классами? Явные или неявные преобразования между классами char и string отсутствуют, но, благодаря методу ToString, переменные типа char стандартным образом преобразуются в тип string. Как отмечалось в лекции 3, существуют неявные преобразования типа char в целочисленные типы, начиная с типа ushort. Обратные преобразования целочисленных типов в тип char также существуют, но они уже явные.

В результате работы процедуры TestChar строка s, полученная сцеплением трех символов, преобразованных в строки, имеет значение BZX, переменная ch равна A, а ее код – переменная code – 65.

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

public int SayCode(char sym)

{

return (sym);

}// SayCode

public char SaySym(object code)

{

return ((char)((int)code));

}// SaySym

Как видите, в первой процедуре преобразование к целому типу выполняется неявно. Во второй – преобразование явное. Ради универсальности она слегка усложнена. Формальный параметр имеет тип object, что позволяет передавать ей в качестве аргумента код, заданный любым целочисленным типом. Платой за это является необходимость выполнять два явных преобразования.

Класс char, как и все классы в C#, наследует свойства и методы родительского класса object. Но у него есть и собственные методы и свойства, и их немало. Приведу сводку этих методов:

Таблица 13-1. Статические методы и свойства класса char

Метод Описание
GetNumericValue Возвращает численное значение символа, если он является цифрой, и (-1) в противном случае.
GetUnicodeCategory Все символы разделены на категории. Метод возвращает Unicode категорию символа. Ниже приведен пример.
IsControl Возвращает true, если символ является управляющим.
IsDigit Возвращает true, если символ является десятичной цифрой.
IsLetter Возвращает true, если символ является буквой.
IsLetterOrDigit Возвращает true, если символ является буквой или цифрой.
IsLower Возвращает true, если символ задан в нижнем регистре.
IsNumber Возвращает true, если символ является числом (десятичной или шестнадцатеричной цифрой).
IsPunctuation Возвращает true, если символ является знаком препинания.
IsSeparator Возвращает true, если символ является разделителем.
IsSurrogate Некоторые символы Unicode с кодом в интервале [0x1000, 0x10FFF] представляются двумя 16-битными «суррогатными» символами. Метод возвращает true, если символ является суррогатным.
IsUpper Возвращает true, если символ задан в верхнем регистре.
IsWhiteSpace Возвращает true, если символ является «белым пробелом». К белым пробелам помимо пробела относятся и другие символы, например символ конца строки и символ перевода каретки.
Parse Преобразует строку в символ. Естественно, строка должна состоять из одного символа, иначе возникнет ошибка.
ToLower Приводит символ к нижнему регистру
ToUpper Приводит символ к верхнему регистру
MaxValue, MinValue Свойства, возвращающие символы с максимальным и минимальным кодом. Возвращаемые символы не имеют видимого образа.

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

public void TestCharMethods()

{

Console.WriteLine("Статические методы класса char:");

char ch='a', ch1='1', lim =';', chc='\xA';

double d1, d2;

d1= char. GetNumericValue(ch); d2= char. GetNumericValue(ch1);

Console.WriteLine("Метод GetNumericValue:");

Console.WriteLine("sym 'a' - value {0}", d1);

Console.WriteLine("sym '1' - value {0}", d2);

 

System.Globalization.UnicodeCategory cat1, cat2;

cat1 = char. GetUnicodeCategory(ch1);

cat2 = char. GetUnicodeCategory(lim);

Console.WriteLine("Метод GetUnicodeCategory:");

Console.WriteLine("sym '1' - category {0}", cat1);

Console.WriteLine("sym ';' - category {0}", cat2);

 

Console.WriteLine("Метод IsControl:");

Console.WriteLine("sym '\xA' - IsControl - {0}",

char. IsControl(chc));

Console.WriteLine("sym ';' - IsControl - {0}",

char. IsControl(lim));

 

Console.WriteLine("Метод IsSeparator:");

Console.WriteLine("sym ' ' - IsSeparator - {0}",

char. IsSeparator(' '));

Console.WriteLine("sym ';' - IsSeparator - {0}",

char. IsSeparator(lim));

 

Console.WriteLine("Метод IsSurrogate:");

Console.WriteLine("sym '\u10FF' - IsSurrogate - {0}",

char. IsSurrogate('\u10FF'));

Console.WriteLine("sym '\\' - IsSurrogate - {0}",

char. IsSurrogate('\\'));

string str = "\U00010F00";

//Символы Unicode в интервале [0x10000,0x10FFF]

//представляются двумя 16-битными суррогатными символами

Console.WriteLine("str = {0}, str[0] = {1}", str, str[0]);

Console.WriteLine("str[0] IsSurrogate - {0}",

char. IsSurrogate(str, 0));

 

Console.WriteLine("Метод IsWhiteSpace:");

str ="пробелы, пробелы!" + "\xD" + "\xA" + "Всюду пробелы!";

Console.WriteLine("sym '\xD ' - IsWhiteSpace - {0}",

char. IsWhiteSpace('\xD'));

Console.WriteLine("str: {0}", str);

Console.WriteLine("и ее пробелы - символ 8 {0},символ 17 {1}",

char. IsWhiteSpace(str,8), char. IsWhiteSpace(str,17));

 

Console.WriteLine("Метод Parse:");

str="A";

ch = char. Parse(str);

Console.WriteLine("str:{0} char: {1}",str, ch);

Console.WriteLine("Минимальное и максимальное значение:{0}, {1}",

char. MinValue.ToString(), char. MaxValue.ToString());

Console.WriteLine("Их коды: {0}, {1}",

SayCode(char. MinValue), SayCode(char. MaxValue));

}// TestCharMethods

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

Рис. 13.1. Вызовы статических методов класса char

Кроме статических методов у класса char есть и динамические методы. Большинство из них это методы родительского класса object, наследованные и переопределенные в классе char. Из собственных динамических методов стоит отметить метод CompareTo, позволяющий проводить сравнение символов. Этот метод отличается от метода Equal тем, что для несовпадающих символов он выдает «расстояние» между символами в соответствии с их упорядоченностью в кодировке Unicode. Приведу пример:

public void testCompareChars()

{

char ch1, ch2;

int dif;

Console.WriteLine("Метод CompareTo");

ch1='A'; ch2= 'Z';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0}, {1} = {2}",

ch1, ch2, dif);

ch1='а'; ch2= 'А';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0}, {1} = {2}",

ch1, ch2, dif);

ch1='Я'; ch2= 'А';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0}, {1} = {2}",

ch1, ch2, dif);

ch1='A'; ch2= 'A';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0}, {1} = {2}",

ch1, ch2, dif);

ch1='А'; ch2= 'A';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0}, {1} = {2}",

ch1, ch2, dif);

ch1='Ё'; ch2= 'А';

dif = ch1.CompareTo(ch2);

Console.WriteLine("Расстояние между символами {0}, {1} = {2}",

ch1, ch2, dif);

}// TestCompareChars

Результаты сравнения выглядят так:

Рис. 13.2. Сравнение символов

Анализируя эти результаты можно понять, что в кодировке Unicode как латиница, так и кириллица плотно упакованы. Исключение составляет буква Ё – большая и малая – они выпадают из плотной кодировки. Малые буквы в кодировке непосредственно следуют за большими буквами. Расстояние между алфавитами в кодировке довольно большое, – русская буква А на 975 символов правее в кодировке, чем соответствующая буква в латинском алфавите.

Класс char[] – массив символов

В языке C# определен класс char []и его можно использовать для представления строк постоянной длины, как это делается в С++. Более того, поскольку массивы в C# динамические, то расширяется класс задач, в которых можно использовать массивы символов для представления строк. Так что имеет смысл разобраться, насколько хорошо C# поддерживает работу с таким представлением строк.

Прежде всего, ответим на вопрос, задает ли массив символов C# строку С, заканчивающуюся нулем? Ответ, нет, не задает. Массив char[] – это обычный массив. Более того, его нельзя инициализировать строкой символов, как это разрешается в С++. Константа, задающая строку символов, принадлежит классу string, а в C# не определены взаимные преобразования между классами string и char[], даже явные. У класса string есть, правда, динамический метод ToCharArray, задающий подобное преобразование. Возможно, также, посимвольно передать содержимое переменной string в массив символов. Приведу пример:

public void TestCharArAndString()

{

//массивы символов

//char[] strM1 = "Hello, World!";

//ошибка: нет преобразования класса string в класс char[]

string hello = "Здравствуй, Мир!";

char [] strM1 = hello.ToCharArray();

PrintCharAr("strM1",strM1);

//копирование подстроки

char [] World = new char [3];

Array.Copy(strM1,12,World,0,3);

PrintCharAr("World",World);

Console.WriteLine(CharArrayToString(World));

}// TestCharArAndString

Закомментированные операторы в начале этой процедуры показывают, что прямое присваивание строки массиву символов недопустимо. Однако метод ToCharArray, которым обладают строки, позволяет легко преодолеть эту трудность. Еще одну возможность преобразования строки в массив символов предоставляет статический метод Copy класса Array. В нашем примере часть строки strM1 копируется в массив World. По ходу дела в методе вызывается процедура PrintCharAr класса Testing, печатающая массив символов как строку. Вот ее текст:

void PrintCharAr(string name, char [] ar)

{

Console.WriteLine(name);

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

Console.Write(ar[i]);

Console.WriteLine();

}// PrintCharAr

Метод ToCharArray позволяет преобразовать строку в массив символов. К сожалению, обратная операция не определена, поскольку метод ToString, которым конечно же обладают все объекты класса char[], печатает информацию о классе, а не содержимое массива. Ситуацию легко исправить, написав подходящую процедуру. Вот текст этой процедуры CharArrayToString, вызываемой в нашем тестирующем примере:

string CharArrayToString(char [] ar)

{

string result="";

for (int i = 0; i< ar.Length; i++) result += ar[i];

return (result);

}// CharArrayToString

Класс char[], как и всякий класс-массив в C#, является наследником не только класса object, но и класса Array, а, следовательно, обладает всеми методами родительских классов, подробно рассмотренных в предыдущей главе. А есть ли у него специфические методы, позволяющие выполнять операции над строками, представленных массивами символов? Таких специальных операций нет. Но, некоторые перегруженные методы класса Array можно рассматривать как операции над строками. Например, метод Copy позволяет выделять и заменять подстроку в теле строки. Методы IndexOf, LastIndexOf позволяют определить индексы первого и последнего вхождения в строку некоторого символа. К сожалению, их нельзя использовать для более интересной операции – нахождения индекса вхождения подстроки в строку. При необходимости такую процедуру можно написать самому. Вот как она выглядит:

int IndexOfStr(char []s1, char [] s2)

{

//возвращает индекс первого вхождения подстроки s2 в строку s1

int i =0, j=0, n=s1.Length-s2.Length; bool found = false;

while ((i<=n) &&!found)

{

j = Array.IndexOf(s1,s2[0],i);

if (j <= n)

{

found= true; int k = 0;

while ((k < s2.Length)&& found)

{

found = char. Equals(s1[k+j],s2[k]); k++;

}

}

i=j+1;

}

if (found) return (j); else return (-1);

}// IndexOfStr

В реализации используется метод IndexOf класса Array, позволяющий найти начало совпадения строк, после чего проверяется совпадение остальных символов. Реализованный здесь алгоритм является самым очевидным, но далеко не самым эффективным.

А теперь рассмотрим процедуру, в которой определяются индексы вхождения символов и подстрок в строку:

public void TestIndexSym()

{

char [] str1, str2;

str1 = "рококо".ToCharArray();

//определение вхождения символа

int find, lind;

find= Array.IndexOf(str1,'о');

lind = Array.LastIndexOf(str1,'о');

Console.WriteLine("Индексы вхождения о в рококо:{0},{1};",

find, lind);

//определение вхождения подстроки

str2 = "рок".ToCharArray();

find = IndexOfStr(str1,str2);

Console.WriteLine("Индекс первого вхождения рок в рококо:{0}",

find);

str2 = "око".ToCharArray();

find = IndexOfStr(str1,str2);

Console.WriteLine("Индекс первого вхождения око в рококо:{0}",

find);

}// TestIndexSym

В этой процедуре вначале используются стандартные методы класса Array для определения индексов вхождения символа в строку, а затем созданный метод IndexOfStr для определения индекса первого вхождения подстроки. Корректность работы этого метода проверяется на разных строках. Вот результаты ее работы:

Рис. 13.3. Индексы вхождения подстроки в строку

Существует ли в C# тип char*

В языке C# указатели допускаются в блоках, отмеченных как небезопасные. Теоретически в таких блоках можно объявить переменную типа char*, но все равно не удастся написать столь же короткую как в С++ процедуру копирования строк. Правильно считать, что в C# строки типа char* использовать не рекомендуется.

Вариант 1

34. Отметьте правильные объявления:

q char a = new char("a");

q char b = "b";

q Char[] c = new char[5];

q char[] d = {'a','b','c','d'}.

35. Отметьте истинные высказывания:

q в языке C#, также как и в С++, строка завершается нулевым кодом.

q в языке C# можно объявить строку типа char*.

q у класса char нет конструкторов с параметрами.

q существуют взаимно-обратные преобразования между типами char и string;

q существует неявное преобразование символов char в целочисленный тип.

36. Выберите правильный вариант ответа:

Для создания копии строки постоянной длины - массива символов - можно использовать:

q присваивание;

q статический метод Copy;

q динамический метод CopyTo;

q посимвольное присваивание.

Вариант 2

38. Даны объявления:

char ch = 'A';

char[] ar ={'B','C','D'}, ar1= new char[3];

Отметьте синтаксически корректные операторы:

q ar1 = char.Parse("BCD");

q ch = char.Parse("BCD");

q ch = char.Copy("B");

q ar1= Array.Copy(ar);

q ar.CopyTo(ar1,0).

39. Отметьте истинные высказывания:

q массив char[] задает строку постоянной длины и потому не может динамически менять размер;

q в массиве char[] можно заменять символы;

q в массив char[] можно вставлять новые символы;

q неинициализированные символы массива char[] имеют нулевой код;

q существует явное преобразование переменных целочисленного типа в символы char.

40. Даны объявления:

string s = "Hello, Dolly!";

const int size =15;

char[] c0 = new char[size], c1= new char[size];

char[] c2 = new char[size], c3= new char[size];




Поделиться с друзьями:


Дата добавления: 2014-12-25; Просмотров: 687; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.216 сек.