Четверг, 28.03.2024, 20:19
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск

Главная » 2010 » Февраль » 11 » Действия над строками
00:15
Действия над строками
Действия над строками
До сих пор все наши операции над строками сводились к выводу строк на кон-
соль, чтению строк с консоли и объединению строк посредством оператора +.
В процессе программирования более сложных приложений вы очень скоро убеди-
тесь, что значительная их часть предполагает различные манипуляции со строками.
По этой причине нам представляется разумным потратить несколько страниц кни-
ги на наиболее распространенные способы работы со строками в С#.
Начнем с того, что переменная типа string — это всего лишь массив перемен-
ных типа char, доступных в режиме "только чтение". Иными словами, мы можем
получить доступ к отдельным символам строки следующим образом:
string myString = *A string*;
char myChar = myString [1] ;
Однако присваивать отдельные символы таким способом нельзя.
Для получения массива, доступного для записи, следует воспользоваться приве-
денным ниже кодом. В нем используется команда TocharArray () переменной типа
массива:
string myString = "A string";
char[] myChars = myString.ToCharArray();
Теперь мы можем выполнять манипуляции с массивом типа char обычным путем.
Строки могут использоваться и в циклах foreach:
foreach (char character in myString)
{
Console.WriteLine("{0}*, character);
}
Как и в случае других массивов имеется возможность узнать число элементов
с помощью myString.Length. Таким же образом можно определить общее количе-
ство символов в строке:
string myString - Console.ReadLine () ;
Console.WriteLine("You typed {0} characters.", myString.Length);
Другим основополагающим способом работы со строками является использова-
ние команд В формате, аналогичном формату команды <string>.ToCharArray().
Существуют две простые, но очень полезные команды: <string>.ToLower()
и <string>.ToUpper(). Они позволяют переводить всю строку целиком в нижний
и верхний регистр соответственно. Чтобы оценить пользу от них, представьте си-
туацию, когда вы хотите убедиться в поступлении от пользователя какого-то отве-
та, например, строки "yes"- Если мы переведем всю введенную строку в нижний
регистр, то сможем воспринять и такие строки, как "YES", "Yes", "yeS" и т. д.:
string userResponse = Console.ReadLine();
if (userResponse.ToLowerO == "yes")
{
••// выполнение действий в случае получения ответа
100 Глава 5
Обратите внимание, что эта команда, как и другие рассматриваемые в данном
разделе команды, на самом деле не изменяет ту строку, к которой применяется.
Напротив, использование этой команды для некоторой строки приводит к созда-
нию новой строки, которую можно сравнить с какой-либо другой строкой (как по-
казано выше) или присвоить другой переменной. В роли этой переменной может
выступать переменная, над которой выполняется данная операция:
userResponse = userResponse.ToLower();
Это важный момент, о котором не следует забывать, поскольку с помощью записи:
userResponse.ToLcwer (•) ;
многого добиться не удастся!
Давайте посмотрим, что еще мы можем сделать для облегчения интерпретации
ответов пользователя. Что произойдет в том случае, если пользователь случайно
включил в начало или в конец своего ответа пробел? В таком варианте вышепри-
веденный код не сработает. Необходимо убрать из введенной строки все пробелы,
чего МОЖНО ДОбитЬСЯ ПОСреДСТВОМ КОМанДЫ <string>.Trim():
s t r i n g userResponse = Console.ReadLine();
userResponse = userResponse,Trim();
i f (userResponse.ToLower() == "yes")
II выполнение действий в случае получения ответа
ШШФ>: .. , < 'Л/:-: . C U : ' ; : • I" •• : : : ' ^ ^ У Л " ^\'"'.. ^ 'Л :: " ' ': Ж ? Ш ' ' В Ш'! ''Ш Ш ^ '' : Ш ¥^1l
В этом случае мы окажемся в состоянии определить строки, подобные следующим:
- YES"
"Yes "
Такая же команда может быть использована для удаления любых других симво-
лов, которые задаются с помощью массива типа char, например:
char[] trimChars = {' ', 'е' , 's'};
string userResponse = Console.ReadLine();•
userResponse = userResponse.ToLower();
userResponse = userRe spon.se. Trim {trimChars);
:и^%ЩШШШ^-Щ^Ш.^''••••'•'i:•-•'',••••••:'-•'• -;••^-•-^ •:": Щ ' й ^ : - I ^; -:.-::
// выполнение действий в случае получения ответа
Это позволяет удалить все пробелы, символы "е" и символы "s", находящиеся
в начале или в конце строки. Если предположить, что в строке отсутствуют какие-
либо другие символы, то появится возможность определять строки:
"Yeeeees"
т У
и им подобные.
Существует Также ВОЗМОЖНОСТЬ ИСПОЛЬЗОВаТЬ КОМанДЫ <string>.TrimStart()
и <string>.TrimEndO, которые будут удалять пробелы только из начала или толь-
ко из конца строки соответственно. В этих командах также имеется возможность
задания массива типа char удаляемых символов.
Имеются еще две команды работы со строками, которые выполняют манипуляции
С Пробелами внутри строк: <str^g>.PadLeft() И <string>.PadRight (). Эти команды
позволяют дополнять строки пробелами слева или справа до заданной длины стро-
ки. Они могут использоваться следующим образом:
< string>.PadX(< требуемаяДлина>);
Дополнительные сведения о переменных 101
Например:
royString = "Aligned*;
myString = myString.PadLeft(10);
В результате к слову 'Aligned*, содержащемуся в переменной mystring, будут
добавлены три пробела слева. Этот метод может оказаться полезным для вырав-
нивания строк, располагаемых одна над другой, в частности, при расположении
строк с номерами.
Так же, как и в случае команд, предназначенных для удаления символов, опи-
сываемые команды допускают вариант использования, позволяющий задавать сим-
вол, которым будет дополняться строка. В данном случае, однако, следует задавать
отдельный символ, а не массив символов. Например:
: myString - "Aligned*;
myString = myString.PadLeft(10, ' - ' ) ;
В итоге в начало строки, хранящейся в переменной mystring, будет добавлено три
символа тире.
Существует большое количество других команд, выполняющих манипуляции со
строками; многие из них предназначены для использования в весьма специфиче-
ских ситуациях. Мы будем обсуждать их в последующих главах по мере возникно-
вения необходимости в них. Однако перед тем как двигаться дальше, стоит
рассмотреть одну из возможностей VS, на которую вы, вероятно, уже обратили
внимание при чтении предыдущих глав и — особенно — данной главы.
Практикум: автоматическое завершение строк в VS
1. Создайте новое консольное приложение с именем chO5ExO5
В директории C:\BegCSharp\Chapter5.
2. Добавьте следующий код в ciassi.cs в точном соответствии с тем,
как он здесь написан:
s t a t i c void Main ( s t r i ng [] args)
string myString = •"This i s a t e s t . " ;
char[] separator = { ' / } ;
string[] myWords;
myWords = myString.
3. Обратите внимание, что, как только вы
введете последнюю точку, немедленно
раскроется окно, показанное на рисунке
справа.
•ф
•&ф
»ф
•»ф

•*•
[Clone I A
GompareTo
СоруТо
endsWith J
Equals I
GetEnumerator
GetHashCode
GetType
GetTypeCode
indexOf j^J
•*# PadLeft
^•PadRfght
•&• Remove
^Replace
* StartsWifch
~S Substring
^ф ToCharArray
^•Tolower
^.ф ToString zl
4. Не изменяя положение курсора, наберите символ s.
Содержание окна изменится, а рядом с ним появится текст
на желтом фоне (см. рис. слева).
sthng[] String.Split{char[] separator, int count) (^ t overloads)
Выделяет в данном экземпляре подстроки, ограниченные одним иди
несколькими символами, заданными в массиве, а затем переносит эти
подстроки в массив String. Параметр определяет максимальное количество
элементов массива, которое может быть возвращено.
102 Глава 5
5. Введите следующие символы: "(separator);".
Окно закроется, а программа примет следующий вид:
static void Main (string [] args)
{
string myString = "This is a test.";
char[] separator = {' ' } ;
string[] myWords; ,,,,.„„
myWords = myString.Split(separator);
}
6. Добавьте следующий код, обращая внимание на всплывающие окна:
static void Main(string[] args)
{
string myString = "This is a test.";
char [ ] separator = {' '} ;
string[] myWords;
myWords = myString.Split(separator) ;
foreach (string word in myWords)
{
Console.WriteLineC {0}", word) ;
7. Запустите программу
(см. рис. слева).
Как это работает
В данном коде присутствуют два
момента, на которые следует обратить
внимание. Первый из них касается
новой команды для работы со стро-
ками, второй относится к использованию функции автоматического завершения
строк VS. Мы последовательно рассмотрим оба момента.
Команда, которую мы используем в нашей программе,— <string>.spiito —
преобразует переменную типа string в массив типа string, разбивая ее на под-
строки в указанных точках. Эти точки определяются посредством массива типа
char, который в нашем случае содержит всего один элемент — символ пробела:
c h a r [ ] s e p a r a t o r = { ' * } ;
Следующая часть программы получает подстроки, возникшие при разбиении
исходной строки по пробелам, т. е. массив отдельных слов:
string[] myWords;
myWords = myString.Split(separator);
После этого мы проходим массив слов в цикле foreach и выводим каждое слово на
консоль:
foreach (string word in myWords)
{
Console.WriteLine(*{0}", word);
Заметьте, что ни одно слово не содержит пробелов
ни внутри себя, ни по краям, При использовании команды split о
символы, применяемые для разбиения строки (сепараторы),
удаляются.
Дополнительные сведения о переменных 103
Теперь рассмотрим автоматическое завершение строк. VS — высокоинтеллек-
туальная система, и она вырабатывает огромное количество информации по мере
того, как вы вводите свою программу. Как только вы набрали точку после слова
mystring, система определяет, что mystring — это строка; она определяет также,
что вы собираетесь задать какую-то команду, применяемую для работы со строка-
ми, и предлагает вам все возможные варианты. В этот момент при желании можно
прекратить набор текста и выбрать команду, которую вы собираетесь использо-
вать, с помощью клавиш управления курсором. По мере того как вы перемещае-
тесь по списку доступных команд, VS сообщает вам, что означает текущая команда,
и приводит синтаксис ее использования.
Если мы продолжаем набирать текст, то VS автоматически переносит выбран-
ную команду в начало списка возможных команд. Когда там окажется необходимая
вам команда, вы можете просто продолжить ввод текста, как если бы имя этой
команды было набрано вами полностью; после этого, введя символ (, вы должны
задать дополнительную информацию, которую требуют некоторые команды. В этом
случае VS сообщает формат, в котором должна задаваться такая информация,
и представит разные варианты команд, которым требуется различное количество
информации.
Данная особенность VS очень удобна, поскольку она позволяет легко находить
информацию о незнакомых типах. Возможно, вам покажется интересным просмот-
реть все команды, существующие для типа string, и поэкспериментировать с ними —
ничего из того, что вы будете делать, не приведет к поломке компьютера, так что
играйте на здоровье!
Итоги
В этой главе определенное внимание было уделено расширению знаний о пере-
менных и устранению некоторых имевшихся пробелов. Возможно, наиболее важ-
ной темой является преобразование типов, поскольку к ней мы будем возвращаться
постоянно на протяжении всей книги. Прочно усвоив ее основные понятия, вы су-
щественно облегчите свою жизнь в будущем!
Также было представлено несколько новых типов переменных, которые могут
использоваться для более удобного хранения данных. Вы узнали, как применение
перечислимых типов позволяет сделать программу более удобочитаемой за счет
использования легко распознаваемых значений; как можно употреблять структуры
для совместного хранения нескольких связанных элементов информации; каким
образом можно группировать однородную информацию в массивы. На протяжении
всей остальной книги мы не раз еще столкнемся с использованием всех этих
типов.
Наконец, в этой главе описывались действия над строками и обсуждались осно-
вополагающие методы и принципы их выполнения. Для работы со строками суще-
ствует большое количество команд; нами были рассмотрены только некоторые из
них, однако было показано, каким образом можно вести поиск имеющихся команд
в VS. Следуя этим путем и экспериментируя с различными командами, вы можете
получить немало удовольствия. По крайней мере одно из приводимых ниже упраж-
нений может быть выполнено с помощью одной или нескольких команд работы со
строками, которые не обсуждались в данной главе. Попробуйте догадаться само-
стоятельно!
104 ' Глава 5
Упражнения
1. Какие из приведенных ниже преобразований не могут
выполняться неявно?
a) int В short
b) short в int
С) bool В string
d) byte В float
2. Напишите программу, в которой описывается перечислимый
тип color (цвет), использующий в качестве базового типа short
и содержащий все цвета радуги, а также белый и черный.
Может ли для такого перечислимого типа в качестве базового
использоваться тип byte?
3. Видоизмените программу-генератор множества Мандельброта
из предыдущей главы таким образом, чтобы для описания
комплексных чисел использовалась следующая структура:
struct imagNum
public double real, imag;
} . .
4. Сможет ли приведенный ниже код пройти процедуру компиляции?
И если нет, то почему?
string[] blab = new string[5]
string[5] = 5th string. •'. . '•
5. Напишите консольное приложение, которое принимает
вводимую пользователем строку и выводит строку, в которой
все символы расположены в обратном порядке.
6. Напишите консольное приложение, которое принимает
вводимую пользователем строку и заменяет все вхождения "по"
на "yes".
7. Напишите консольное приложение, которое обрамляет
двойными кавычками все слова, содержащиеся в строке.

























Категория: информатика | Просмотров: 1653 | Добавил: basic | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz