12

我有一个任务是在一行n中读取给定的数字,从控制台用空格( )分隔。

当我在单独的行( )上读取每个数字时,我知道该怎么做,但是当数字在同一行时Console.ReadLine(),我需要有关如何做的帮助。

4

7 回答 7

22

您可以使用String.Split. 您可以提供要用于将字符串拆分为多个的字符。如果您没有提供所有空格,则将其假定为拆分字符(因此换行符、制表符等):

string[] tokens = line.Split(); // all spaces, tab- and newline characters are used

或者,如果您只想使用空格作为分隔符:

string[] tokens = line.Split(' ');

如果你想解析它们,int你可以使用Array.ConvertAll()

int[] numbers = Array.ConvertAll(tokens, int.Parse); // fails if the format is invalid

如果要检查格式是否有效,请使用int.TryParse.

于 2015-01-21T14:52:53.107 回答
8

您可以使用分割线String.Split()

var line = Console.ReadLine();
var numbers = line.Split(' ');
foreach(var number in numbers)
{
    int num;
    if (Int32.TryParse(number, out num))
    {
        // num is your number as integer
    }
}
于 2015-01-21T14:52:36.023 回答
7

您可以使用Linq读取行然后拆分,最后将每个项目转换为整数:

  int[] numbers = Console
        .ReadLine()
        .Split(new Char[] {' '}, StringSplitOptions.RemoveEmptyEntries)
        .Select(item => int.Parse(item))
        .ToArray();
于 2015-01-21T14:56:33.450 回答
3

您只需拆分输入的数据。

string numbersLine = console.ReadLine();

string[] numbers = numbersLine.Split(new char[] { ' '});

// Convert to int or whatever and use
于 2015-01-21T14:53:27.783 回答
0

这将帮助您删除出现在输入字符串末尾或开头的多余空格。

string daat1String = Console.ReadLine();
daat1String = daat1String.TrimEnd().TrimStart();
string[] data1 = daat1String.Split(null);
int[] data1Int = Array.ConvertAll(data1, int.Parse);
于 2018-12-13T12:12:15.460 回答
0

你可以做

int[] Numbers  = Array.ConvertAll(Console.ReadLine().Split(' '),(item) => Convert.ToInt32(item));

上面的行帮助我们在 Line 中获取单个整数,由 单个空格分隔。数字之间的两个或多个空格将导致错误。

int[] Numbers = Array.ConvertAll(Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries), (item) => Convert.ToInt32(item));

即使一行中的数字之间有两个或多个空格,这种变化也将修复错误并正常工作

于 2019-03-27T15:34:37.820 回答
-2

你可以使用这个功能,它非常有帮助

    static List<string> inputs = new List<string>();
    static int input_pointer = 0;

    public static string cin(char sep = ' ')
    {
        if (input_pointer >= inputs.Count)
        {
            string line = Console.ReadLine();

            inputs = line.Split(sep).OfType<string>().ToList();
            input_pointer = 0;
        }

        string v = inputs[input_pointer];
        input_pointer++;

        return v;
    }

例子:

        for(var i =0; i<n ; i++)
            for (var j = 0; j<n; j++)
            {
                M[i,j] = Convert.ToInt16(cin());
            }
于 2020-07-22T11:21:43.937 回答