No.676 C0nvertPr0b1em

はじめに

競技プログラミングyukicoder
No.676 C0nvertPr0b1emの解説です
コードはC#です
何かあればTwitter→@pirorirori_n712まで

問題

入力:英大小文字からなる文字列S
出力:大文字I、小文字lを1に(I,l→1) 大文字O、小文字oを0に(O,o→0) したもの

→入力されたものの中からIとlを探して1に、Oとoを探して0に置き換えて出力すればいい

解き方

特定の文字を任意の文字に入れ替える問題

解き方例

①StringクラスのReplace()メソッドを使う
②文字列を一文字ずつ取り出して、該当の文字を置き換える

①StringクラスのReplace()メソッドを使う

String.Replaceメソッド

使い方

String.Replace(string,string);

String.Replace(置換前の文字列,置換後の文字列);

コード例
using System;

class No676{
    static void Main(){
        //入力された文字列を変数に保存
        var str=Console.ReadLine();
        //文字列のIを1に変換
        var answer=str.Replace("I","1");
        //文字列のlを1に変換
        answer=str.Replace("l","1");
        //文字列のOを0に変換
        answer=str.Replace("O","0");
        //文字列のOを0に変換
        answer=str.Replace("o","0");
        //変換した文字列を出力
        Console.WriteLine(answer);
    }
}

これを整理して
置き換えを全て連続で

using System;

class No676{
    static void Main(){
        //入力された文字列を変数に保存
        var str=Console.ReadLine();
        //文字列のIを1に変換
        //文字列のlを1に変換
        //文字列のOを0に変換
        //文字列のoを0に変換
        var answer=str.Replace("I","1").Replace("l","1").Replace("O","0").Replace("o","0");
        //変換した文字列を出力
        Console.WriteLine(answer);
    }
}

さらに整理
出力メソッド内で置き換えを行う

using System;

class No676{
    static void Main(){
        //入力された文字列を変数に保存
        var str=Console.ReadLine();
        //文字列のIを1に変換
        //文字列のlを1に変換
        //文字列のOを0に変換
        //文字列のoを0に変換
        //変換した文字列を出力
        Console.WriteLine(str.Replace("I","1").Replace("l","1").Replace("O","0").Replace("o","0"));
    }
}

もう一回整理
入力の保存から文字列の変換、出力を一気に行う

using System;

class No676{
    static void Main(){
        //入力された文字列をそのまま処理
        //文字列のIを1に変換
        //文字列のlを1に変換
        //文字列のOを0に変換
        //文字列のoを0に変換
        //変換した文字列を出力
        Console.WriteLine(Console.ReadLine().Replace("I","1").Replace("l","1").Replace("O","0").Replace("o","0"));
    }
}

②文字列を一文字ずつ取り出して、該当の文字を置き換える

foreach
foreachを使って文字列から文字を一つずつ取り出し、
条件に合う文字を指定の文字と入れ替える

使い方

※Stringから一文字ずつ取り出す場合
foreach(char in string){}

→charは取りだした文字、stringは元の文字列

コード例

文字列を一文字ずつ取り出し、
取り出した文字が置き換えに該当するものならば置き換えて出力(I,l→1 , O,o→0)
該当しないものならばそのまま文字を出力する
最後にConsole.WriteLine()で改行のみを行う

class No676{
    static void Main(){
        //入力を保存
        var str=Console.ReadLine();
        //取り出した文字が置き換えの必要なものである場合に、置き換えた文字を一時的に保存するための変数
        var tmp='a';
        //foreachで文字列から一文字ずつ文字を取り出す
        foreach(char c in str){
            //取り出した文字が'I'または'l'だった場合
            if(c=='I'||c=='l')
            {
                //文字は'1'に置き換える
                tmp='1';
            }
            //取り出した文字が'O'または'o'だった場合
            else if(c=='O'||c=='o')
            {
                //文字は'0'に置き換える
                tmp='0';
            }
            //文字が上の条件に当てはまらない場合、すなわち置き換えの必要がない文字の場合
            else{
                //そのまま文字を出力する
                Console.Write(c);
                //これ以上、下に処理を続けずに次の文字にうつる
                continue;
            }
            //文字を置き換えた場合はここで文字を出力
            Console.Write(tmp);
        }
        //最後に改行
        Console.WriteLine();
    }
} 

Console.Write()は改行なしの出力、Console.WriteLine()は改行ありの出力