Доступ к отдельным символам в строке.

Работа со строками

Класс string (System.String)содержит множество полезных методов, позволяющих, например:

• Конкатенировать две и более строк

• Сравнить две строки

• Обратиться к отдельным символам или подстрокам заданной строки

• Вставить часть одной строки в другую

• Скопировать строку

• Определить число символов в строке

Для использования этих методов требуется определенная система идентификации отдельных символов и подстрок в строке. Предположим, например, что нужно ско­пировать подстроку "is" следующей строки:

"This is string"

Для решения такой задачи в классе stringприменяется целочисленный индекс, от­считываемый от 0, а не от 1 (рис. 1.). Очевидно, что он нумерует все символы, вклю­чая пробелы и знаки пунктуации.

 

T H I S   I S   S T R I N G

 

Чтобы обратиться к подстроке "is",необходимо написать команду со следующим смыслом: "прочесть 2 символа, начиная с позиции 5". В строке 3 следующего фраг­мента показано, как это делается в С#:

string andString;

string myString = "This is string";

andString = myString.SubString(5, 2);

Здесь применяется метод Substringкласса string.Он копирует "is"из myString в andString.Таким образом, выражение myString.SubString(5, 2)указывает программе возвратить подстроку строки myString,начинающуюся в пози­ции 5 и содержащую 2 символа.

Предположим, что нам необходимо проанализировать некоторый текст и вычислить сколько в этом тексте содержится символов и слов. Для этого нам необходимо понять каким образом можно определять слово в тексте. Легко догадаться, что количество слов равно количеству пробелов плюс один. Тогда возникает другой вопрос, как определить пробел. Для этого в языке С# существует специальный статический метод:

char.IsWhiteSpace(ch)

Здесь ch это анализируемый символ.

Создадим программу, которая выводит количество символов в тексте, а также количество слов в тексте.

using System;

class TextAnalyzer

{

public static void Main()

{

string myText;

int numWhitespaceChars = 0;

int numWords = 0;

char ch;

int index = 0;

 

Console.WriteLine("Please enter text:");

myText = Console.ReadLine();

myText = myText.ToUpper();

 

while(index < myText.Length)

{

ch = myText[index];

if(char.IsWhiteSpace(ch))

numWhitespaceChars++;

index++;

}

numWords = numWhitespaceChars + 1 ;

Console.WriteLine("Text analysis:");

Console.WriteLine("Number of symbols: {0:N0}", index);

Console.WriteLine("Number of words: {0:N0}", numWords);

Console.ReadLine();

 

}

}

 

Другие методы необходимые для анализа текста

char.lsLetter(ch) – определяет является ли текущий символ буквой.

char.IsDigit(ch) – определяет является ли текущий символ цифрой.