Foreach (char character in myString)

Лекция 6. Действия над строками.

До сих пор все наши операции над строками сводились к выводу строк на консоль, чтению строк с консоли и объединению строк посредством оператора +. В процессе программирования более сложных приложений вы очень скоро убедитесь, что значительная их часть предполагает различные манипуляции со строками. Начнем с того, что переменная типа string — это всего лишь массив переменных типа char, доступных в режиме "только чтение". Иными словами, мы можем получить доступ к отдельным символам строки следующим образом:

string myString = “A string”;

char myChar = myString [1] ;

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

string myString = "A string";

char[] myChars = myString.ToCharArray();

Теперь мы можем выполнять манипуляции с массивом типа char обычным путем. Строки могут использоваться и в циклах foreach:

{

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.ToLower() == "yes")

{

// выполнение действий в случае получения ответа

}

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

userResponse = userResponse.ToLower();

Это важный момент, о котором не следует забывать, поскольку с помощью записи:

userResponse.ToLower () ;

многого добиться не удастся!

Давайте посмотрим, что еще мы можем сделать для облегчения интерпретации ответов пользователя. Что произойдет в том случае, если пользователь случайно включил в начало или в конец своего ответа пробел? В таком варианте вышеприведенный код не сработает. Необходимо убрать из введенной строки все пробелы, чего можно добиться посредством команды <string>.Trim():

string userResponse = Console.ReadLine();

userResponse = userResponse,Trim();

if (userResponse.ToLower() == "yes")

{

//выполнение действий в случае получения ответа

}

В этом случае мы окажемся в состоянии определить строки, подобные следующим:

“ YES"

“Yes”

Такая же команда может быть использована для удаления любых других символов, которые задаются с помощью массива типа char, например:

char[] trimChars = {' ', 'е' , 's'};

string userResponse = Console.ReadLine();

userResponse = userResponse.ToLower();

userResponse = userRe spon.se. Trim {trimChars);

if (userResponse= = “y”)

{

// выполнение действий в случае получения ответа

}

Это позволяет удалить все пробелы, символы "е" и символы "s", находящиеся в начале или в конце строки. Если предположить, что в строке отсутствуют какие-либо другие символы, то появится возможность определять строки:

"Yeeeees"

“У”

и им подобные.

Существует также возможность использовать команды <string>.TrimStart() и <string>.TrimEnd(), которые будут удалять пробелы только из начала или только из конца строки соответственно. В этих командах также имеется возможность задания массива типа char удаляемых символов. Имеются еще две команды работы со строками, которые выполняют манипуляции с пробелами внутри строк: <string>.PadLeft() и <string>.PadRight(). Эти команды позволяют дополнять строки пробелами слева или справа до заданной длины строки. Они могут использоваться следующим образом:

< string>.PadX(< требуемаяДлина>);

Например:

myString =”Aligned”;

myString = myString.PadLeft(10);

В результате к слову “Aligned”, содержащемуся в переменной myString, будут добавлены три пробела слева. Этот метод может оказаться полезным для выравнивания строк, располагаемых одна над другой, в частности, при расположении строк с номерами. Так же, как и в случае команд, предназначенных для удаления символов, описываемые команды допускают вариант использования, позволяющий задавать символ, которым будет дополняться строка. В данном случае, однако, следует задавать отдельный символ, а не массив символов. Например:

myString =”Aligned”;

myString = myString.PadLeft(10, ' - ' ) ;

В итоге в начало строки, хранящейся в переменной mystring, будет добавлено три символа тире.

Пример работы со строками:

static void Main ( string [] args)

{

string myString = “This is a test .” ;

char[] separator = (‘ ‘);

string[] myWords;

myWords = myString;

}

Обратите внимание, что, как только вы

введете последнюю точку, немедленно

раскроется окно, показанное на рисунке

справа.

Не изменяя положение курсора, наберите символ s.

Содержание окна изменится, а рядом с ним появится

Текст на желтом фоне.

 
 

 


Введите следующие символы: "(separator);". Окно закроется, а программа примет следующий вид:

static void Main (string [] args)

{

string myString = "This is a test.";

char[] separator = {‘ ‘} ;

string[] myWords;

myWords = myString.Split(separator);

}

Добавьте следующий код, обращая внимание на всплывающие окна:

static void Main(string[] args)

{

string myString = "This is a test.";

char [ ] separator = {‘ ‘} ;

string[] myWords;

myWords = myString.Split(separator) ;