Это правильно?C# строка, которая ведет себя так, как массив символов
string a;
a = Console.ReadLine();
for (int i = 0; a[i] != '\0'; i++)
{
Console.WriteLine(a[i]);
}
Это правильно?C# строка, которая ведет себя так, как массив символов
string a;
a = Console.ReadLine();
for (int i = 0; a[i] != '\0'; i++)
{
Console.WriteLine(a[i]);
}
Нет, это неверно, потому что строки C# обычно не заканчиваются символом NUL.
Вам необходимо завершить цикл, используя i < a.Length
, а не глядя в массив.
В отличие от C и C++, строки в C# не являются NUL
-уроки. Вместо этого вы можете получить свою длину через свойство Length
. Для печати каждого символа в строке, вы можете использовать:
string a;
a = Console.ReadLine();
for (int i = 0; i< a.Length; i++)
{
Console.WriteLine(a[i]);
}
или альтернативно, используя foreach
:
foreach(char c in a)
{
Console.WriteLine(c);
}
Кроме того, несмотря на синтаксис a[i]
, строки в .NET не являются массивами символов, они (неизменяемых) объектов. Они могут быть реализованы с использованием массивов символов, но это другое дело. Причина, по которой вы можете использовать синтаксис a[i]
, состоит в том, что String
определяет индексатор.
Вы также можете сделать это:
string a;
a = Console.ReadLine();
foreach(var c in a)
{
Console.WriteLine(c);
}
Нет, это не правильно, потому что характер NUL не хранится в string
. Я хотел бы сделать это с foreach
заявлением:
string a = Console.ReadLine();
foreach (var myChar in a)
{
Console.WriteLine(myChar);
}
Нет, это не будет работать. Строки C#: неNUL
-минированный. Вместо этого они сохраняют свойство длины. Это обычное явление для сборщиков мусора. В качестве примера, это делает правильную строку:
string a = "a string ";
a += '\0';
a += " still the same string";
Что вы можете сделать это:
foreach (char c in a)
{
Console.WriteLine(c);
}
или это:
for (int i=0;i<a.Length;i++)
{
Console.WriteLine(a[i]);
}
Да, почему бы и нет? – Lasooch
Правильно, в каком смысле? – rhughes
Неправильно, и он потерпит крах - см. Мой ответ ниже. –