Строковый массив символов - PullRequest
0 голосов
/ 10 февраля 2019

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

Извините, если это кажется глупым, но я не получил ответ, погуглив.

Ответы [ 5 ]

0 голосов
/ 10 февраля 2019

Разве строка уже не является символьным массивом в c #?

Нет, строка представляет собой CLASS , который инкапсулирует «последовательную коллекцию символов» (см. Документы ).Обратите внимание, что в нем явно не указано «Array of Char».Теперь может быть верно, что строковый класс в настоящее время использует массив символов для достижения этой цели, но это не означает, что он должен ~ использовать массив символов для достижения этой цели.Это фундаментальная концепция объектно-ориентированного программирования, которая сочетает в себе скрытие информации и идею «черного ящика», который что-то делает.Не имеет значения, как черный ящик (класс) выполняет свою задачу под капотом, поскольку он не меняет открытый интерфейс, представленный конечному пользователю.Возможно, в следующей версии .Net для реализации строкового класса будет использоваться некая новомодная магическая структура, которая не является массивом символов.Конечный пользователь может не знать, что это изменение произошло даже потому, что он все еще может использовать строковый класс таким же образом, и , если они того пожелают, могут по-прежнему выводить символы в массив с ToCharArray()... хотя внутренне строка больше не является массивом символов.

0 голосов
/ 10 февраля 2019

Разве строка уже не является символьным массивом в c #?

Базовая реализация - да.

Но вам не разрешен прямой доступ к этому.String использует инкапсуляцию, чтобы быть неизменным объектом.

Фактический массив private скрыт от просмотра.Вы можете использовать индексатор (свойство) для чтения символов, но вы не можете их изменить.Индексатор доступен только для чтения.

Так что да, вам нужно ToCharacterArray() для реверса и подобных действий.Обратите внимание, что вы всегда получаете другую строку, вы не можете изменить оригинал.

0 голосов
/ 10 февраля 2019

Внутри себя текст хранится как последовательная коллекция только для чтения объектов Char.

См. Руководство по программированию Документы

0 голосов
/ 10 февраля 2019
    Console.WriteLine(StringHelper.ReverseString("framework"));
    Console.WriteLine(StringHelper.ReverseString("samuel"));
    Console.WriteLine(StringHelper.ReverseString("example string"));

ИЛИ

public static string ReverseString(string s)
{
    char[] arr = s.ToCharArray();
    Array.Reverse(arr);
    return new string(arr);
}
0 голосов
/ 10 февраля 2019

Да Тип String - это массив символов, но массив строк не является массивом символов. Вам необходимо преобразовать каждую строку в вашем массиве в тип char, чтобы вы могли легко инвертировать ее индексы, а затем преобразовать во временную строку и добавитьстрока в массив для обращения

...