从自定义字符串方法返回Int数组?

时间:2016-11-22 22:28:34

标签: c# visual-studio

我正在创建一个自定义方法,返回AnalyzerInts[]来计算string input的小写,大写,空格,标点符号和字符数。我收到一个未处理的异常错误。 “System.IndexOutOfRangeException:索引超出了数组的范围。”如何正确地将Int[] AnalyzerInts值检索到主方法中?

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Enter a string/sentence: ");
        string userInput = Console.ReadLine();
        int[] answers = StringAnalyzer(userInput);
        Console.WriteLine("You have {0} uppercase letters in your string.", answers[0]);
        Console.WriteLine("You have {0} lowercase letters in your string.", answers[1]);
        Console.WriteLine("You have {0} whitespace characters in your string.", answers[2]);
        Console.WriteLine("You have {0} punctuation characters in your string.", answers[3]);
        Console.WriteLine("You have {0} characters in your string.", answers[4]);
    }





    static int[] StringAnalyzer (string input)
    {
        int[] AnalyzerInts = new int[4];
        for (int x = 0; x < input.Length; x++)
        {
            if (char.IsUpper(input[x]))
            {
                AnalyzerInts[0]++;
            }
            else if (char.IsLower(input[x]))
            {
                AnalyzerInts[1]++;
            }
            else if (char.IsWhiteSpace(input[x]))
            {
                AnalyzerInts[2]++;
            }
            else if (char.IsPunctuation(input[x]))
            {
                AnalyzerInts[3]++;
            }
            AnalyzerInts[4]++;
        }
        return AnalyzerInts;
    }

3 个答案:

答案 0 :(得分:2)

方法定义可以被视为[return type] [method name] ([parameters]) 在您的情况下,您定义了StringAnalyzer以接收名为string的{​​{1}}参数,并且返回 input值(由{{1}指示在方法名称之前)

您正在寻找的是让方法接受string但返回整数数组string,因此该方法应定义为

string

此外,退货时,您不需要int[],只需static int[] StringAnalyzer(string input) { /*...*/}

最后,您需要初始化数组以包​​含5个不是4的元素:[]

答案 1 :(得分:1)

您的返回类型为string,而您正在尝试返回int[]

将您的方法签名更改为:

static int[] StringAnalyzer (string input)

并将您的return语句更改为:

return AnalyzerInts;

答案 2 :(得分:1)

改变这个:

csv_list = [row[0], row[1], len(row[0]) for row in all_data]
csv_data = sorted(csv_list, key=lambda row: row[2])

为:

int[] AnalyzerInts = new int[4];

因为如果你查看你的代码,你会看到你的数组假定有5个项目,而不是4个。(提示:你正在向控制台打印5个句子,你访问的最高索引是4 C#数组从索引0开始。)