No.597 concat

はじめに

競技プログラミングyukicoder
No.597 concat
言語はC#
何かあればTwitter→@pirorirori_n712まで

問題

N 個の文字列が与えられるので、これを順に連結した文字列を出力する。

入力:

 N
S1
S2
⋮
SN

1≤N≤10
1≤|Si|≤20

Si は'a'-'z'のみで構成される
一行目に文字列の数N
二行目以降は連結する文字列

出力:

S1S2…  と連結した文字列

解き方

文字列の与えられ方が、一行ずつなので
ループの中で文字列を読み込みながら連結させる。
与えられた文字列を繋げて出力するには、
大きく分けて以下の二つがある。
①文字列を繋いだものを出力する
②文字列を一つずつ横に出力した結果が、文字列を繋いだ文字列になる
更にこの二つでも方法にはいくつか種類がある

①について

1.+演算子で繋ぐ
string型の変数を一つ用意して、そこに文字列を足していく
2.StringBuilderクラスのStringBuilder.Appendで繋ぐ
末尾に文字列を足していく
3.StringクラスのString.Concatで繋ぐ
+演算子と同じ動作
4.StringクラスのString.Formatで繋ぐ
2つの文字列を連結する

②について

1.入力を一行ずつConsole.Write()で出力して、
最終的な出力が「文字列を繋いでいる」かたちになるようにする

コード例

①-1 +演算子で繋ぐ
23ms,258Byte

using System;

class No597{
    static void Main(string[] args){
        //入力をintにキャストして変数に入れる
        //これは文字列の数なので後でループで使う
        var num=Int32.Parse(Console.ReadLine());
        //文字列の変数、ここに文字列を足していく
        var str="";
        //N回分ループを回す
        for(int i=0;i<num;i++){
            //読み込んだ文字列を文字列を保存している変数に足していく
            str+=Console.ReadLine();
        }      
        //最後に文字列を出力する
        Console.WriteLine(str);
    }
}


①-2 StringBuilderクラスのStringBuilder.Appendで繋ぐ
29ms,310Byte

using System;
using System.Text;//StringBuilderクラスを使うために必要

class No597{
    static void Main(string[] args){
        //入力をintにキャストして変数に入れる
        //これは文字列の数なので後でループで使う
        var num=Int32.Parse(Console.ReadLine());
        //StringBuilderクラスの変数を用意する
        //後のループで文字列をここに追加していく
        StringBuilder sb = new StringBuilder();
        //N回分ループを回す
        for(int i=0;i<num;i++){
            //先ほど用意した変数に文字列を足していく
            //StringBuilder.Append()は末尾に要素を追加していく
            sb.Append(Console.ReadLine());
        }      
        //最後に出力する
        Console.WriteLine(sb);
    }
}


①-3 StringクラスのString.Concatで繋ぐ
25ms,276Byte

using System;

class No597{
    static void Main(string[] args){
        //入力をintにキャストして変数に入れる
        //これは文字列の数なので後でループで使う
        var num=Int32.Parse(Console.ReadLine());
        //文字列の変数、ここに文字列を足していく
        var str="";
        //N回分ループを回す
        for(int i=0;i<num;i++){
            //読み込んだ文字列を文字列を保存している変数に足していく
            str=string.Concat(str,Console.ReadLine());
        }  
        //最後に文字列を出力する
        Console.WriteLine(str);
    }
}


①-4 StringクラスのString.Formatで繋ぐ
33ms,285Byte

using System;

class No597{
    static void Main(string[] args){
        //入力をintにキャストして変数に入れる
        //これは文字列の数なので後でループで使う
        var num=Int32.Parse(Console.ReadLine());
        //文字列の変数、ここに文字列を足していく
        var str="";
        //N回分ループを回す
        for(int i=0;i<num;i++){
            //読み込んだ文字列を文字列を保存している変数に足していく
            str=string.Format("{0}{1}",str,Console.ReadLine());
        }    
         //最後に文字列を出力する
        Console.WriteLine(str);
    }
}


②-1 入力を一行ずつConsole.Write()で出力して、
最終的な出力が「文字列を繋いでいる」かたちになるようにする

26ms,210Byte

using System;

class No597{
    static void Main(string[] args){
        //入力をintにキャストして変数に入れる
        //これは文字列の数なので後でループで使う
        var num=Int32.Parse(Console.ReadLine());
        //N回分ループを回す
        for(int i=0;i<num;i++){
            //読み込んだ文字列を出力する
            //このとき、改行はしたくないのでConsole.Write()を使う
            Console.Write(Console.ReadLine());
        }
    }
}


10月9日 一部のByte数とusing Systemの抜けを訂正しました。