2013-11-26 33 views
1

這是正確的嗎?C#字符串表現得像字符數組

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

是的,爲什麼不訪問它呢? – Lasooch

+2

正確的是什麼意思? – rhughes

+0

這是不正確的,它會崩潰 - 請參閱下面的答案。 –

回答

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中的字符串不是字符數組,它們是(不可變的)對象。它們可能使用char數組實現,但這是另一回事。您可以使用a[i]語法的原因是因爲String定義了一個索引器。

1

你也可以這樣做:

string a; 

a = Console.ReadLine(); 

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

不,這不是正確的,因爲NULL字符不是存儲在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