C#字符串表现得像char数组

时间:2013-11-26 14:56:28

标签: c#

这是对的吗?

string a;
a = Console.ReadLine();
for (int i = 0; a[i] != '\0'; i++)
{
    Console.WriteLine(a[i]);
}

6 个答案:

答案 0 :(得分:3)

不,这不正确,因为C#字符串通常不以NUL字符终止。

您需要使用i < a.Length终止循环,而不是查看数组。

答案 1 :(得分: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中的字符串不是char数组,它们是(不可变的)对象。它们可能使用char数组实现,但这是另一回事。您可以使用a[i]语法的原因是String定义了索引器。

答案 2 :(得分:1)

你也可以这样做:

string a;

a = Console.ReadLine();

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

答案 3 :(得分:0)

不,这不正确,因为NUL字符未存储在string中。我会用foreach语句执行此操作:

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

答案 4 :(得分: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]);
}

答案 5 :(得分:0)

这不起作用,因为C#中的strings没有以空字符('\0')终止,所以它们定义了Length。但是,您可以通过a[i]之类的索引访问它,因为它提供了indexer