文字列の大小比較:Python・JS・TS・C++・Craykon は a < b をそのまま使います(どれも文字コード順)。 Java a.compareTo(b)、C strcmp(a, b)、C++ a.compare(b)、C# string.Compare(a, b, StringComparison.Ordinal) は負・0・正を返しますが、**-1 と 1 という約束はありません。 ** Java の compareTo は最初に違う文字のコードの差("a" と "c" なら -2)か長さの差を返し、C の strcmp も実装によっては文字の差を返します。 なので Integer.signum・Math.Sign・(r > 0) - (r < 0) で符号だけ残します。 Python には三方向比較の関数がないので (a > b) - (a < b) で作ります。 大文字・小文字の落とし穴:C# の string.Compare(a, b)(StringComparison なし)はカルチャの規則なので "a" が "B" より前になり、JS の a.localeCompare(b) も同じです。 文字コード順にしたいなら C# は Ordinal、JS は < を使います。
Pythonmain.py · 4 行
q = int(input())for _ in range(q): a, b = input().split() print((a > b) - (a < b))
JavaScriptmain.js · 7 行
const [q, ...lines] = require("fs").readFileSync(0, "utf8").split("\n").map((x) => x.trim());const out = [];for (let i = 0; i < Number(q); i++) { const [a, b] = lines[i].split(" "); out.push(a < b ? -1 : a > b ? 1 : 0);}console.log(out.join("\n"));
TypeScriptmain.ts · 8 行
import { readFileSync } from "node:fs";const [q, ...lines]: string[] = readFileSync(0, "utf8").split("\n").map((x) => x.trim());const out: number[] = [];for (let i = 0; i < Number(q); i++) { const [a, b]: string[] = lines[i].split(" "); out.push(a < b ? -1 : a > b ? 1 : 0);}console.log(out.join("\n"));
JavaMain.java · 16 行
import java.io.BufferedReader;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int q = Integer.parseInt(br.readLine().trim()); StringBuilder out = new StringBuilder(); for (int i = 0; i < q; i++) { String[] p = br.readLine().trim().split(" "); // compareTo는 -1/1이 아니라 "차이"를 돌려주므로 부호만 남긴다 out.append(Integer.signum(p[0].compareTo(p[1]))).append('\n'); } System.out.print(out); }}
C#Main.cs · 18 行
using System;using System.Text;class Program{ static void Main() { int q = int.Parse(Console.ReadLine()); var out_ = new StringBuilder(); for (int i = 0; i < q; i++) { string[] p = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); // 글자 코드로 비교하려면 Ordinal(기본 string.Compare는 문화권 규칙을 따른다) out_.Append(Math.Sign(string.Compare(p[0], p[1], StringComparison.Ordinal))).Append('\n'); } Console.Write(out_); }}
C++main.cpp · 13 行
#include <iostream>#include <string>int main() { std::ios::sync_with_stdio(false); int q; std::string a, b; std::cin >> q; for (int i = 0; i < q; i++) { std::cin >> a >> b; std::cout << (a < b ? -1 : a > b ? 1 : 0) << '\n'; }}
Cmain.c · 14 行
#include <stdio.h>#include <string.h>int main(void) { int q; char a[32], b[32]; if (scanf("%d", &q) != 1) return 0; for (int i = 0; i < q; i++) { scanf("%31s %31s", a, b); int r = strcmp(a, b); /* 부호만 정해져 있다: 음수, 0, 양수 */ printf("%d\n", (r > 0) - (r < 0)); } return 0;}
Craykonmain.cray · 19 行
q = コンソール.行読み().数に();繰り返す (i = 0; i < q; i++){ words = コンソール.行読み().分ける(); a = words[0]; b = words[1]; もし (a < b) { コンソール.書く(-1); } でなければ もし (a > b) { コンソール.書く(1); } でなければ { コンソール.書く(0); }}