从字符串中填充字符数组

6
我正在尝试使用从控制台输入的字符串来填充一个数组。我尝试了下面的代码,但似乎不起作用。在for循环部分中,我遇到了索引超出范围的异常,但我不明白为什么会出现这种情况。是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]);

name直接转换为ToCharArray() - Keyur Ramoliya
1
同样地,由于你从0开始,所以你需要在intoarray.Length - 1处停止,因此你的for循环应该像这样:for (var i = 0; i < intoarray.Length; i++) - vasily.sib
6个回答

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);

3

由于数组从0开始,并且您计算的包括长度,因此最后一次迭代将超出边界。只需更新循环条件为小于长度而不是小于或等于。


2

我喜欢snn bm的回答,但是直接回答你的问题,你的输入长度超过了一个。应该是:

        for (var i = 0; i <= intoarray.Length - 1; i++)

(由于字符串是从零开始索引的,底层数组中的最后一个字符总是在数组长度减1的位置。)


1
  • 1:迭代应为 for (var i = 0; i < intoarray.Length; i++)

  • 2:代码

    foreach (var n in intoarray) Console.WriteLine(intoarray[n]);

    也会抛出异常,因为“n”是数组中的字符,而它被用作数组索引。

  • 3:此外,有一种更简单的方法将字符串转换为字符数组

    var intoarray = name.ToCharArray();

    这是结果


0

这是你的错误。有很多选项可以表示 i < intoarray.Length

for (var i = 0; i < intoarray.Length; i++) // original was i <= intoarray.Length in your code
{
    intoarray[i] = name[i];
}

-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);  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接