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,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()は改行ありの出力