Курс лекций CS (первый семестр)
.pdfКафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова
//действия
В этом случае мы окажемся в состоянии определить строки, подобные следующим: “ 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