2013-11-26 1 views

ответ

3

Нет, это неверно, потому что строки C# обычно не заканчиваются символом NUL.

Вам необходимо завершить цикл, используя i < a.Length, а не глядя в массив.

1

В отличие от 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 определяет индексатор.

1

Вы также можете сделать это:

string a; 

a = Console.ReadLine(); 

foreach(var c in a) 
{ 
    Console.WriteLine(c); 
} 
0

Нет, это не правильно, потому что характер NUL не хранится в string. Я хотел бы сделать это с foreach заявлением:

string a = Console.ReadLine(); 
foreach (var myChar in a) 
{ 
    Console.WriteLine(myChar); 
} 
0

Нет, это не будет работать. Строки 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]); 
} 
0

Это не будет работать, потому что strings в C# не заканчиваются нулевым символом ('\0'), они имеют значение Length. Но да, вы можете получить к нему доступ через индекс, например a[i], потому что он предоставляет indexer

Смежные вопросы