我试图用通过控制台输入的字符串中的字符填充数组。我已经尝试了下面的代码,但是它似乎没有用。我在for循环部分中得到Index Out Of Range异常,但我不明白为什么会发生。 for循环范围不正确吗?任何见识将不胜感激
Console.WriteLine("Enter a string: ");
var name = Console.ReadLine();
var intoarray = new char[name.Length];
for (var i = 0; i <= intoarray.Length; i++)
{
intoarray[i] = name[i];
}
foreach (var n in intoarray)
Console.WriteLine(intoarray[n]);
答案 0 :(得分:9)
ToCharArray()
字符串的可以转换为字符数组。
Console.WriteLine("Enter a string: ");
var name = Console.ReadLine();
var intoarray= name.ToCharArray();
foreach (var n in intoarray)
Console.WriteLine(n);
如果您使用的是foreach,则应等待索引的行为就像获取值一样。
Console.WriteLine(n);
答案 1 :(得分:3)
由于数组从0开始,并且您在计算长度(包括长度),所以最后一次迭代将超出范围。 只需将循环条件更新为小于长度,而不是小于或等于。
答案 2 :(得分:2)
我喜欢snn bm的答案,但直接回答您的问题,您的输入长度超出了一个。应该是:
for (var i = 0; i <= intoarray.Length - 1; i++)
(由于字符串的索引为零,因此基础数组中的最后一个字符将始终位于arrayLength-1的位置。)
答案 3 :(得分:1)
1:迭代次数应为for (var i = 0; i < intoarray.Length; i++)
2:代码
foreach (var n in intoarray)
Console.WriteLine(intoarray[n]);
也会引发异常,因为“ n”是用作数组索引的数组中的字符。
3:此外,还有一种将字符串转换为char数组的简便方法
var intoarray = name.ToCharArray();
答案 4 :(得分:0)
这是您的错误。代表i < intoarray.Length
的选项太多。
for (var i = 0; i < intoarray.Length; i++) // original was i <= intoarray.Length in your code
{
intoarray[i] = name[i];
}
答案 5 :(得分:-1)
使用linq:
// Select all chars
IEnumerable<char> intoarray =
from ch in name
select ch; // can use var instead of IEnumerable<char>
// Execute the query
foreach (char temp in intoarray)
Console.WriteLine(temp);