CODE

【備忘録】C#での標準入力をテンプレートでまとめてみた

投稿日:

Paizaのスキルチェックで毎回思い出すのが面倒なのでまとめました。

スキルチェックでよく使う、先に行数と列数が指定されてるやつは「空白区切り複数行→多次元配列(整数)」

文字列

public class Hello{
    public static void Main(){
        var line = System.Console.ReadLine();
    }
}

普通にvarで読み込むと、数字だろうが文字だろうが文字列扱いになる。

逆に、varをintとするとエラー。

数字(整数)

public class Hello{
    public static void Main(){
        var line = int.Parse(System.Console.ReadLine());
    }
}

文字列をint.Parseで整数型にする。

空白区切り→文字列配列

public class Hello{
    public static void Main(){
        var line = System.Console.ReadLine().Split(' ');
    }
}

Splitの' 'の中に区切りの文字を入れたら、その文字で区切る。

空白区切り→整数配列

public class Hello{
    public static void Main(){
        var line = System.Console.ReadLine().Split(' ');
        int[] array = new int[line.Length];
        for(int i=0; i<line.Length; i++){
            array[i] = int.Parse(line[i]);
        }
    }
}

文字列配列をforで一つづつ整数に変換してarrayに入れる。

Linqを使うと

using System.Linq;
public class Hello{
    public static void Main(){
        var line = System.Console.ReadLine().Trim().Split(' ').Select(s => int.Parse(s)).ToArray();
    }
}

こっちだと短くできるっぽい。usingを忘れずに。

複数行→文字列配列

using System.Collections.Generic;
public class Hello{
    public static void Main(){
        int i = 0;
        string[] array;
        var list = new List<string>();
        while (true) {
            string line = System.Console.ReadLine();
            if (line == null) {
                break;
            }
            else {
                list.Add(line);
                i++;
            }
        }
        array = list.ToArray();
        System.Console.WriteLine(array[2]);
    }
}

入力が全部終わってnullを返すまで1行ずつ読んで、リストに入れる。

最後にリストを配列に変換。

複数行→整数配列

using System.Collections.Generic;
public class Hello{
    public static void Main(){
        int i = 0;
        int[] array;
        var list = new List<int>();
        while (true) {
            var line = System.Console.ReadLine();
            if (line == null) {
                break;
            }
            else {
                list.Add(int.Parse(line));
                i++;
            }
        }
        array = list.ToArray();
    }
}

空白区切り複数行→多次元配列(文字列)

さっきの、空白区切り→配列を繰り返せばいい。

using System.Collections.Generic;
public class Hello{
    public static void Main(){
        int k = 0;
        string[][] array;
        var list = new List<string[]>();
        while (true) {
            var line = System.Console.ReadLine();
            if (line == null) {
                break;
            }
            else {
                list.Add(line.Split(' '));
                k++;
            }
        }
        array = list.ToArray();//出力はジャグ配列
        
        //多次元配列にする場合
        string[,] new_array = new string[array.Length, array[0].Length];
        for(int i=0; i<array.Length; i++){
            for(int j=0; j<array[0].Length; j++){
                new_array[i, j] = array[i][j]; 
            }
        }
    }
}

空白区切り複数行→多次元配列(整数)

using System.Collections.Generic;
public class Hello{
    public static void Main(){
        int k = 0;
        int[][] array;
        var list = new List<int[]>();
        while (true) {
            var line = System.Console.ReadLine();
            if (line == null) {
                break;
            }
            else {
                int[] child_array = new int[line.Split(' ').Length];
                    for(int i=0; i<line.Split(' ').Length; i++){
                        child_array[i] = int.Parse(line.Split(' ')[i]);
                    }
                list.Add(child_array);
                k++;
            }
        }
        array = list.ToArray();//出力はジャグ配列
        
        //多次元配列にする場合
        int[,] new_array = new int[array.Length, array[0].Length];
        for(int i=0; i<array.Length; i++){
            for(int j=0; j<array[0].Length; j++){
                new_array[i, j] = array[i][j]; 
            }
        }
    }
}

paizaみたいに、最初の行で行と列の大きさを示してくれてる場合は

//入力例
4 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
public class Hello{
    public static void Main(){
        var line = System.Console.ReadLine().Split(' ');
        var row = int.Parse(line[0]);
        var col = int.Parse(line[1]);
        
        int[,] array = new int[row, col];
        for(int i=0; i<row; i++){
            line = System.Console.ReadLine().Split(' ');
            for(int j=0; j<col; j++){
                array[i,j] = int.Parse(line[i]);
            }
        }
    }
}

で短くできる。

これ以外は最初に配列の大きさを指定しなくても読み込める。




-CODE

Copyright© DaigoDiary , 2020 All Rights Reserved Powered by STINGER.