学ぶ › TypeScript
データ · 09
文字列
長さ・大文字・反転・一文字取り出し。
文字列は文字の並びです。
下の例は単語を1つ読み、長さ・大文字・逆にした文字列・最初の文字を順に表示します。
s = input()print(len(s))print(s.upper())print(s[::-1])print(s[0])const s = require("fs").readFileSync(0, "utf8").trim();console.log(s.length);console.log(s.toUpperCase());console.log([...s].reverse().join(""));console.log(s[0]);import { readFileSync } from "node:fs";const s: string = readFileSync(0, "utf8").trim();console.log(s.length);console.log(s.toUpperCase());console.log([...s].reverse().join(""));console.log(s[0]);import java.util.Scanner; public class Main { public static void main(String[] args) { String s = new Scanner(System.in).nextLine().trim(); System.out.println(s.length()); System.out.println(s.toUpperCase()); System.out.println(new StringBuilder(s).reverse()); System.out.println(s.charAt(0)); }}using System; class Program{ static void Main() { string s = Console.ReadLine().Trim(); Console.WriteLine(s.Length); Console.WriteLine(s.ToUpper()); char[] r = s.ToCharArray(); Array.Reverse(r); Console.WriteLine(new string(r)); Console.WriteLine(s[0]); }}#include <cctype>#include <iostream>#include <string> int main() { std::string s; std::cin >> s; std::cout << s.size() << '\n'; std::string up = s; for (char& c : up) c = std::toupper(static_cast<unsigned char>(c)); std::cout << up << '\n'; std::cout << std::string(s.rbegin(), s.rend()) << '\n'; std::cout << s[0] << '\n';}#include <ctype.h>#include <stdio.h>#include <string.h> int main(void) { char s[101]; scanf("%100s", s); int n = strlen(s); printf("%d\n", n); for (int i = 0; i < n; i++) putchar(toupper((unsigned char)s[i])); putchar('\n'); for (int i = n - 1; i >= 0; i--) putchar(s[i]); putchar('\n'); printf("%c\n", s[0]); return 0;}s = コンソール.行読み();コンソール.書く(s.長さ);コンソール.書く(s.大文字());コンソール.書く(s.逆に());コンソール.書く(s[0]);hello
5 HELLO olleh h
ポイント
- 番号は 0 から始まります。
最初の文字はs[0]、最後の文字は長さ - 1番です。 - 長さ・大文字・反転・分割・前後の空白除去といった道具はどの言語にもあり、名前が違うだけです。
- 切り出しは二手に分かれます。
終わりの番号を渡す言語では"abcdef"の(1, 3)は"bc"、個数を渡す言語では"bcd"です。 - 文字は中身は数(文字コード)です:
Aは 65、aは 97。
C・C++・Java・C# のcharはそのまま数なので、'A' + 1は66です。 - C・C++ 以外では文字列を書き換えられません。
変えたいときは新しい文字列を作ります。
言語ごとの書き方
| Python | 長さ len(s)、大文字 s.upper()、反転 s[::-1]、分割 s.split()、空白除去 s.strip()、数へ int(s)、切り出し s[1:3](終わりの番号)、コード ord("A") → 65、chr(97) → "a" |
|---|---|
| JavaScript | 長さ s.length、大文字 s.toUpperCase()、反転 [...s].reverse().join("")(文字列には reverse がありません)、s.split(" ")、s.trim()、切り出し s.slice(1, 3)(終わりの番号)、コード s.charCodeAt(0)、String.fromCharCode(97) |
| TypeScript | JavaScript と同じです |
| Java | 長さ s.length()、一文字は s.charAt(i)(s[i] ではありません)、大文字 s.toUpperCase()、反転 new StringBuilder(s).reverse()、s.split(" ")、s.trim()、切り出し s.substring(1, 3)(終わりの番号) |
| C# | 長さ s.Length、大文字 s.ToUpper()、反転は ToCharArray() で作った配列を Array.Reverse、s.Split(' ')、s.Trim()、切り出し s.Substring(1, 3)(個数)。コードを文字に戻すには (char) |
| C++ | 長さ s.size()(または s.length())、大文字は toupper で一文字ずつ、反転 std::string(s.rbegin(), s.rend())、切り出し s.substr(1, 3)(個数) |
| C | 長さ strlen(s) — 数えるたびに末尾の \0 までたどります。大文字は toupper で一文字ずつ、反転は末尾から一文字ずつ |
| Craykon | 長さ s.長さ、大文字 s.大文字()(小文字 小文字)、反転 s.逆に()、s.分ける(" ")、s.空白除去()、数へ s.数に()、切り出し s.切り出す(1, 3)(個数)、コード 文字.コード("A")、文字.コードから(97) |
よくある間違い
文字列の一文字を書き換えたPython · JavaScript · TypeScript · Craykon
s = "abc"
s[0] = "x"→ Python は TypeError、JavaScript はエラーなしで無視、TypeScript はコンパイルエラー、Craykon は「文字列は一文字ずつ変えられません」というエラー
新しい文字列を作ります。
例:Python "x" + s[1:]。
韓国語の長さをバイトで数えたC · C++
strlen("한글")→ 2 ではなく 6 — バイト数を数えます。UTF-8 では韓国語の一文字は3バイトです(C++ の std::string("한글").size() も 6)
C・C++ ではバイト数と文字数が違うことを覚えておきます。
Python・Java・C#・JavaScript・Craykon は 2 です。
言語ごとの違い
文字列が等しいかを調べるとき、Java は
C も
文字列が等しいかを調べるとき、Java は
== ではなく s.equals("yes") を使います(== は同じオブジェクトかを見るので、入力で受け取った yes と比べると false)。C も
== はアドレスの比較なので strcmp(a, b) == 0 を使い、Python・JavaScript・C#・C++(std::string)・Craykon は == で中身を比べます。