ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.12.2025

Просмотров: 3223

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

case "QUIT": case "quit":

return true ;

}

return false;

}

Такой подход работает постольку, поскольку выполняется сравнение только пред­ определенного ограниченного количества строк. Цикл for () представляет собой сущ ственно более гибкий подход, а применение функции Compare ( ) , нечувствительно! к регистру, существенно повышает возможности программы по "пониманию" введенно­ го пользователем.

Считывание ввода пользователя

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

Ваша программа может считывать строки, как если бы это были массива символов, с использованием оператора f oreac h или оператора индекса [], Приведенный ниже исходный текст программы StringToCharAccess демонстрирует данную методику.

// StringToCharAccess - обращение к

символам строки, как

// если бы строка была массивом

 

using System;

 

namespace

StringToCharAccess

 

{

 

 

public class Program

 

{

 

 

public

static voi d Main(string[]

args)

{

 

 

//Считывание строки с клавиатуры

Console . WriteLine("Введите произвольную " + "строку с и м в о л о в . " ) ;

string sRandom = C o n s o l e . R e a d L i n e О ; C o n s o l e . W r i t e L i n e ( ) ;

//Выводим стоку

Console . WriteLine("Вывод строки: " + s R a n d o m ) ;

C o n s o l e . W r i t e L i n e ( ) ;

// Выводим ее как последовательность символов Console . Write("Вывод с использованием foreach: " ) ; foreach(char с in sRandom)

{

C o n s o l e . W r i t e ( с ) ;

}

C o n s o l e . W r i t e L i n e ( ) ; .// Завершение строки

// Пустая строка - разделитель

206

Часть

III.

Объектно-основанное программирован


C o n s o l e . W r i t e L i n e ( ) ;

/ / В ы в о д с т р о к и к а к п о с л е д о в а т е л ь н о с т и с и м в о л о в

C o n s o l e . W r i t e ( " В ы в о д с и с п о л ь з о в а н и е м for: " ) ; for(int i = 0; i < sRandom . Length; i++)

{

C o n s o l e . W r i t e { s R a n d o m [ i ] ) ;

}

C o n s o l e . W r i t e L i n e ( ) ; / / З а в е р ш е н и е с т р о к и

/ / О ж и д а е м п о д т в е р ж д е н и я п о л ь з о в а т е л я

C o n s o l e . W r i t e L i n e ( "Нажмит е <Enter> д л я " +

" з а в е р ш е н и я п р о г р а м м ы . . . " ) ;

C o n s o l e . R e a d ( ) ;

Эта программа выводит некоторую совершенно случайную строку, вводимую поль­ зователем. Сначала строка выводится обычным способом с применением метода WriteLine (string) . Затем для вывода строки используется цикл f oreach, который выводит ее символы по одному. И наконец, для той же цели применяется цикл for на­ ряду с оператором индекса [ ]. В результате на экране получается примерно следующее:

Введите

п р о и з в о л ь н у ю

с т р о к у

с и м в о л о в .

Вывод

с т р о к и : dj n dfv ckexfqyfz

cnhjrf

Вывод

с

и с п о л ь з о в а н и е м

foreach:

djn

dfv ckexfqyfz cnhjrf

Вывод

с

и с п о л ь з о в а н и е м

for:

dj n

dfv

ckexfqyfz cnhjrf

Нажмите

<Enter> д л я

з а в е р ш е н и я п р о г р а м м ы . . .

Зачастую требуется убрать все пробельные символы с обоих концов строки (под тер­ мином пробельный символ (white space) подразумеваются символы, обычно не отобра­ жаемые на экране, например, пробел, символ новой строки или табуляции). Для этого можно воспользоваться методом Trim ():

// Удаляем п р о б е л ь н ы е с и м в о л ы с к о н ц о в с т р о к и sRandom = sRandom. Trim () ;

String.Trim () возвращает новую строку. Применяя этот метод так, как по­ казано во фрагменте исходного текста выше, первоначальная версия строки с пробельными символами оказывается потерянной и больше не используется.

Разбор числового ввода

Функция ReadLine () используется для считывания объекта типа string. Про­ грамма, которая ожидает числовой ввод, должна эту строку соответствующим образом преобразовать в числа. С# предоставляет программисту класс Convert со всем необхо­ димым для этого инструментарием, в частности, методами для преобразования строки в каждый из встроенных числовых типов. Так, следующий фрагмент исходного текста считывает число с клавиатуры и сохраняет его в переменной типа int.

Глава ft Работа со строками в С#

207


s t r i ng s =

C o n s o l e . R e a d L i n e ( ) ; //

Данные вводятся

как

строка,

int n

= C o n v e r t . T o I n t 3 2 ( s ) ;

//

и преобразуются

в число

Другие

методы

для преобразования еще

более

очевидны: ToDouble (),

ToFloat

T o B o o l e a n ( ) .

Метод ToInt32() выполняет преобразование в 32-битовое знаковое цел число (вспомните, что 32 бита — это размер обычного int), так что эта фуш ция выполняет преобразование строки в число типа int; для преобразован! строки в число типа long используется функция То Int 6 4 ().

Когда функции преобразования попадается "неправильный" символ, она может ви дать некорректный результат, так что вам следует убедиться, что строка содержит има| но те данные, которые ожидаются.

Приведенная далее функция возвращает значение true, если переданная ей crpoi состоит только из цифр. Такая функция может быть вызвана перед функцией преобрал вания строки в целое число, поскольку число может состоять только из цифр.

Вообще-то для чисел с плавающей точкой в строке может быть эта самая T«I ка, а кроме того, перед числом может находиться знак минус — но сейчас» терес представляют не эти частности, а сама идея.

Итак, вот эта функция:

// IsAllDigits - возвращает true, если все символы строки

//являются цифрами

public static bool

IsAllDigits(string sRaw)

 

 

{

 

 

 

 

 

 

//

Убираем все лишнее с концов

строки .

Если

при этом

в

//

строке ничего

не остается —

значит,

эта

строка не

 

//представляет собой число

string s = s R a w . T r i m ( ) ; // Игнорируем пробельные символы if (s.Length == 0)

{

return false;

}

//Циклически проходим по всем символам строки

for(int index = 0; index < s.Length; index++)

{

 

 

 

//

Наличие в строке символа, не являющегося цифрой,

//

говорит о том, что это

не

число

if

(Char . IsDigit(s[index])

==

false)

{

 

 

 

 

retur n false ;

 

 

}

}

// Все в порядке : строка состоит только из цифр

return true ;

}

Функция IsAllDigits сначала удаляет все ненужные пробельные символы с обош| концов строки. Если после этого строка оказывается пуста — значит, она состояла цели! ком из пробельных символов и числом не является. Если строка остается не пустой, функция проходит по всем ее символам. Если какой-то из символов оказывается не цщ

208

Часть

III.

Объектно-основанное

программирована



той, функция возвращает false, указывая, что переданная ей строка не является чис­ том. Возврат функцией значения true означает, что все символы строки — цифры, так что строка, по всей видимости, представляет собой некоторое числовое значение.

Следующая демонстрационная программа считывает вводимое пользовате­ лем число и выводит его на экран:

// IsAllDigits - демонстрационная программа, иллюстрирующая [// применение функции IsAllDigits

using System;

namespace IsAllDigits

{

class

Program

 

 

 

 

 

{

 

 

 

 

 

 

 

public

static voi d Main(string[]

args)

{

 

 

 

 

 

 

 

// Ввод строки с клавиатуры

 

 

 

Console . WriteLine("Введите целое

ч и с л о " ) ;

string s =

C o n s o l e . R e a d L i n e ( ) ;

 

 

// Проверка, может ли эта строка

быть числом

if

(!IsAllDigits(s))

 

 

 

 

{

 

 

 

 

 

 

 

 

Console . WriteLine("Это

н е

ч и с л о ! " ) ;

}

 

 

 

 

 

 

 

else

 

 

 

 

 

 

{

 

 

 

 

 

 

 

 

// Преобразование строки в целое число

 

int

n =

I n t 3 2 . P a r s e ( s ) ;

 

 

 

 

//

Выводим число, умноженное

на 2

 

Console . WriteLine("2 *

{ о }

=

{ l } " , n, 2 * n ) ;

}

// Ожидаем подтверждения пользователя Console . WriteLine("Нажмите <Enter> для " +

"завершения п р о г р а м м ы . . . " ) ;

Console . Read();

}

// IsAllDigits - возвращает true, если все символы

//строки

//являются цифрами

public static bool IsAllDigits(string sRaw)

{

 

 

 

 

 

 

 

//

Тело

функции

было рассмотрено ранее

и здесь

оно

для

II

краткости

опущено

 

 

 

Программа считывает строку, вводимую пользователем с клавиатуры, после чего вы­ полняет ее проверку с помощью функции IsAllDigits. Если функция возвращает false, программа выводит пользователю предупреждающее сообщение. Если же нет,

Глава 9. Работа со строками в С #

209