入力された文字列を逆順にして出力する処理(例、12345と入力された文字列を54321に並べ替えて出力)は、演習問題などで頻繁に見かけます。
今回は、標準入力された文字列を逆順に並べ替えて出力する処理について、C#、Java、JavaScript、PHP、Python3、Rubyの6つの言語で書いてみました。
C#
using System;
using System.Linq;
public class Sample{
public static void Main(){
int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n; i++){
string line = Console.ReadLine().Trim();
System.Console.WriteLine(string.Concat(line.Reverse()));
}
}
}
C#の場合は、組み込みメソッドstring.Concat(文字列.Reverse())を使うことで、文字列を逆順に並べ替えられます。
組み込みメソッドのReverse()を使うには、using System.Linqを読み込む必要があります。全角文字などの2バイト文字についても、この方法で逆順にできます。
Java
import java.util.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
for (int i = 0; i < n; i++){
String line = scan.next();
StringBuffer strline = new StringBuffer(line);
System.out.println(strline.reverse().toString());
}
}
}
Javaの場合は、StringBufferを使って変数に文字列を読み込み、組み込みメソッドのreverse()とtoString()を使うことで文字列を逆順にできます。2バイト文字もOK。
JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
var n = parseInt(lines[0]);
for (var i = 1; i <= n; i++){
var line = lines[i];
var str = line.split('');
console.log(str.reverse().join(''));
}
});
JavaScriptの場合は、文字列自体を逆順にする組み込みメソッドは無いですが、配列の要素については組み込みメソッドreverse()を使うことで、要素の並びを逆順にできます。
標準入力された文字列をsplit(”)で配列に変換して逆順に並び替えます。その後、Join(”)で文字列に戻す処理を行うことで、文字列を逆順にできます。2バイト文字もOK。
PHP(1バイト文字の場合)
<?php
// Your code here!
$n = (int)trim(fgets(STDIN));
for ($i = 0; $i < $n; $i++){
$line = trim(fgets(STDIN));
echo strrev($line)."\n";
}
?>
PHPの場合は、組み込みメソッドstrrev(文字列)を使うことで、文字列を逆順に並べ替えられます。但し、この方法は1バイト文字にしか使えません。この方法を2バイト文字に使うと、文字化けが起こるなど正しく表示されないです。
Python3
n = int(input())
for i in range(0,n):
line=input().rstrip()
print (line[::-1])
文字列[::-1]とすることで、元の文字列を逆順に並べ替えることが可能です。2バイト文字もOK。
Ruby
n=gets.chomp.to_i
for i in 0...n
line=gets.chomp
puts line.reverse
end
Rubyの場合は、組み込みメソッドreverseを使えば一発で文字列を逆順に並べ替え。2バイト文字もOK。
PHPで2バイト文字を逆順に並び替える場合は、文字列を逆順に並び替えるための組み込みメソッドが存在しないため、文字列を逆順にする処理を自分で用意する必要があります。
PHP(2バイト文字)
<?php
function reverse_str($str_line){
$len = mb_strlen($str_line);
$rt_str = "";
for ($i = 0; $i < $len; $i++){
$rt_str = $rt_str.mb_substr($str_line,$len-$i-1,1);
}
return $rt_str;
}
$n = (int)trim(fgets(STDIN));
for ($i = 0; $i < $n; $i++){
$line = trim(fgets(STDIN));
echo reverse_str($line)."\n";
}
?>
今回は引数として渡した文字列を逆順に並べ替えて返すメソッドreverse_str(文字列)を定義。引数として渡された文字列の一番最後の文字から前に向かって1文字づつ取り出して変数に付け加えていく方法によって、文字列を逆順に並べ替える処理を行っています。
組み込みメソッドmb_substr(文字列,文字の位置,取り出したい文字数)を使うことで、2バイト文字も取り扱えるようになります。