Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курс лекций CS (первый семестр)

.pdf
Скачиваний:
7
Добавлен:
20.05.2015
Размер:
2.69 Mб
Скачать

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

//действия

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

.

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

string user = Console.ReadLine();

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

user = user.Trim(trimChars);

Console.WriteLine(user);

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

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

string user = Console.ReadLine();

user=user.PadLeft(10);

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

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

171

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

string user = Console.ReadLine();

user=user.PadLeft(10,'*');

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string myString = "Это моя программа"; char[] separator = {' '};

string[] myWords;

myWords = myString.Split(separator); foreach (string word in myWords)

{

Console.WriteLine("{0}", word);

}

}

}

}

172

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Результат.

Замечания.

1.Команда, которую мы используем в нашей программе, <string>.Split() преобразует переменную типа string в массив типа string, разбивая ее на подстроки в указанных точках.

2.Эти точки определяются посредством массива типа char, который в нашем случае содержит всего

один элемент — символ пробела: char[] separator = {' '};

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

пробелам, т. е. массив отдельных слов: string[] myWords;

myWords = myString.Split(separator);

4.При использовании команды Split() символы, применяемые для разбиения строки (сепараторы), удаляются, но только по одному. Т.е. если в строке будет несколько подряд расположенных пробелов, то эффект будет следующий:

string myString = "Это моя программа"; char[] separator = {' '};

string[] myWords;

myWords = myString.Split(separator); foreach (string word in myWords)

{Console.WriteLine("{0} c количеством символов {1}", word,word.Length);}

5.Если в массиве сепараторов задать несколько символов, то эффект будет следующий: string myString = "Это моя программа";

char[] separator = {' ','р'};

173

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

string[] myWords;

myWords = myString.Split(separator);

foreach (string word in myWords)

{Console.WriteLine("{0}", word); }

Рассмотрим еще некоторые методы строк.

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

string myStr = "mexanic"; Console.WriteLine(myStr); Console.WriteLine("Метод Substring()"); Console.WriteLine(myStr.Substring(3)); Console.WriteLine(myStr.Substring(3, 2)); Console.WriteLine("Метод LastIndexOf()");

Console.WriteLine("Символ а имеет позицию {0}",myStr.LastIndexOf('a'));

174

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

}

}

}

Результат.

Замечания.

1.Метод Substring() вырезает подстроку из заданной строки.

2.Метод LastIndexOf() возвращает позицию вхождения заданного символа.

175

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Лекция №26.

Ввод чисел с помощью строк.

Когда мы изучали массивы, то ввод элементов массива осуществлялся не очень удобным способом: по одному элементу в строке. Рассмотрим, как используются строки для организации ввода массивов.

Пример. Ввод одномерного массива:

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{const int n=10;

Console.WriteLine("Введите 10 элементов массива"); string myString=Console.ReadLine();

char[] separator = {' '}; string[] myWords;

myWords = myString.Split(separator); int[] a = new int[10];

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

a[i] = Convert.ToInt32(myWords[i]); for (int i = 0; i < n; i++)

Console.Write("{0}\t",a[i]);

}

}

}

Результат.

176

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Ввод смешанной информации.

Предположим, что от пользователя требуется смешанная информация, например, вводится дата рождения вида 12 мая, которую нужно разбить на подстроки с числом и названием месяца. При этом возможен вариант, что пользователь введен информацию с точностью до наоборот: мая 12.

Пример.

using System;

using System.Collections.Generic; using System.Text;

namespace ConsoleApplication1

{

class Program

{

struct my

{

public int ch; public string mes;

}

static void Main(string[] args)

{

my Chel; Chel.ch = 0; Chel.mes = "";

Console.WriteLine("Введите дату рождения"); string myString=Console.ReadLine();

177

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

char[] separator = {' '}; string[] myWords;

myWords = myString.Split(separator);

for (int i = 0; i < myWords.Length; i++) if (Char.IsDigit(myWords[i][0]))

Chel.ch = Convert.ToInt32(myWords[i]);

else

Chel.mes = myWords[i];

Console.WriteLine("{0}\t{1}",Chel.ch,Chel.mes);

}

}

}

Результат.

Ошибки ввода.

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

Пример.

using System;

using System.Collections.Generic;

using System.Text;

178

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

namespace ConsoleApplication1

{

class Program

{

static bool ProverkaNat(string buf)

{

bool fl=true; foreach(char ch in buf) if (!Char.IsDigit(ch))

{fl=false; break;

}

return fl;

}

static bool ProverkaCel(string buf)

{

bool fl = true;

if (buf[0] != '+' && buf[0] != '-' && !Char.IsDigit(buf[0])) return false;

for (int i = 1; i < buf.Length;i++ ) if (!Char.IsDigit(buf[i]))

{

fl = false;

break;

}

return fl;

}

static bool ProverkaVesh(string buf)

{

179

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

bool fl

= true;

 

int k =

0;

 

 

if (buf[0]

!= '+'

&& buf[0] != '-' && !Char.IsDigit(buf[0]))

return

false;

 

for (int i

= 1; i

< buf.Length; i++)

if (buf[i] ==

',')

 

k++;

 

if (k >

1)

return

false;

for (int i

= 1; i

< buf.Length; i++)

if (!Char.IsDigit(buf[i])&&buf[i]!=',')

{

fl = false;

break;

}

return fl;

}

static void Main(string[] args)

{

Console.WriteLine("Введите натуральное число"); int a=0;

string buf=Console.ReadLine(); if (!ProverkaNat(buf))

{

Console.WriteLine("Ошибка ввода");

return;

}

a = Convert.ToInt32(buf);

Console.WriteLine(a);

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

180