if (char.ToLower (s[i]) != char.ToLower (s[s.Length - i -1]))
return false;
return true;
}
Если нужны подсказки, то выделите их и нажмите Ctrl+Space. Для проверки воспользуйтесь услугами следующего программного фрагмента:
string[] ss = { "Dennis sinned", "Level", "Шалаш", "Собор", "Rotor" };
foreach (string s in ss)
Console.WriteLine (s + ":\t" + MyString.IsPalindrome (s));
Проверьте работу метода на примере первого английского палиндрома (1614): "Lewd did I live & evil I did dwel". Сделайте скидку на особенность старого написания dwel (вместо современного dwell). В 19-м веке девизом некоторых адвокатов было изречение: "Si nummi immunis" ("Если заплатишь, освобожу"). Англичане перевели его так: "Give me my fee, and I warrant you free". Внесите изменения в метод IsPalindrome так, чтобы он причислил к стану палиндромов оригинальную версию высказывания (Подсказка: s = s.Replace (" ","");).
Если вам кажется, что вас обделили, убрав указатели, то это—иллюзия, или вредные слухи. Чтобы создать неуправляемый код (или работать с неуправляемым heap), придется предупредить компилятор: установить в True флаг Project→Properties→ ConfigurationProperties→AllowUnsafeCodeBlocks. Затем надо создать unsafe-метод и вставить его в класс Program. В соответствии с правилами нашего каркаса файл TestUnsafe.cs должен выглядеть так. Вам надо вызвать метод TestUnsafe из метода Main().
using System;
namespace MyConsole
{
partial class Program
{
static string test = "MS Educational "; // Переменная класса Program
unsafe static void Display(char* text) // Опасный метод
{
for (int i = 0; text[i] != 0; ++i)
Console.Write(text[i] + " ");
}
unsafe static void TestUnsafe() // Вызывающий метод тоже следует сделать опасным, так как внутри идет работа с указателем
{
Console.Clear();
Console.WriteLine("\n\tTest Unsafe Code\n");
char[] text = new char[] { 'C', 'e', 'n', 't', 'e', 'r', ' ' };
fixed (char* p = test)
Display(p);
fixed (char* p = &text[0])
Display(p);
fixed (char* p = "Avalon.ru")
Display(p);
Console.WriteLine("\n\tPress any key to go to main menu\n");
Console.ReadKey(true);
}
}
}
Метод Display (неуправляемым способом) работает с управляемым объектом test класса string, вложенным в класс Program, затем он принимается за управляемый массив text, и на закуску съедает неуправляемый литерал (константу типа char*). Оператор fixed временно предотвращает перемещение управляемых объектов сборщиком мусора. Это—необходимая мера для работы неуправляемым способом с управляемыми объектами. Любопытные детали всплывают в режиме эксперимента (в методе Display замените " " на ' ' и сравните результаты). Второй эксперимент (замените в TestUnsafe &text[0] на text) показывает эквивалентность ссылок &text[0] и text. Задание. Измените код метода Display так, чтобы он работал исключительно с указателем text и не использовал индекс (i).
Следующий метод FloatInterior более изощренно работает с управляемым массивом. Здесь мы пытаемся близко рассмотреть внутреннее представление чисел в формате с плавающей точкой.
unsafe static void FloatInterior (float[] a)
{
Console.WriteLine();
fixed (float *pFix = a) // Прикалываем к столу массив одной булавкой (чтобы не убежал)
{
float *p = pFix; // Этой булавкой будем его ковырять (булавка подвижна)
for (int i=0; i<a.Length; i++, p++) // Хотим увидеть байты числа в формате float
{
Console.Write("\n{0,12:f2} at {1} : ", a[i], (int)p); // Элемент массива и его адрес
byte *pb = (byte*)p + 4; // Этой (тонкой) булавкой ковыряемся во внутренней структуре переменной типа float
for (int j=0; j<4; j++)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.