文字が最初と最後に現れる位置
一行目に文字列 s、二行目に一文字 c が与えられる。
s の中で c が最初に現れる位置と最後に現れる位置を、空白一つで区切って出力せよ。
位置は 0 から数える。
c が s に一度も現れなければ "-1 -1" を出力する。
一度だけ現れるなら二つの数は同じになる。
- 入力
- s は英小文字と数字、長さ 1〜1,000。
c は英小文字か数字の一文字 - 出力
- 最初の位置と最後の位置(なければ -1 -1)
banana a
1 5
hello z
-1 -1
一行目に文字列 s、二行目に一文字 c が与えられる。
s の中で c が最初に現れる位置と最後に現れる位置を、空白一つで区切って出力せよ。
位置は 0 から数える。
c が s に一度も現れなければ "-1 -1" を出力する。
一度だけ現れるなら二つの数は同じになる。
banana a
1 5
hello z
-1 -1
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
最初の位置・最後の位置:Python s.find(c)/s.rfind(c)、JS・TS・Java indexOf/lastIndexOf、C# IndexOf/LastIndexOf(char を渡すと序数比較)、C++ find/rfind、C strchr/strrchr。
Craykon は s.位置検索(c) で最初の位置を得て、最後の位置は末尾から s[i] == c を調べるループで探します(後ろから探すメンバーはありません)。
見つからないときの値が言語ごとに違います:たいてい -1 ですが、Python index/rindex は ValueError を投げ、C++ find は std::string::npos(size_t の最大値 18446744073709551615)を返すので、そのまま出力すると -1 になりません。
C の strchr はポインタか NULL を返すので、先に NULL か調べてから p - s で位置を求めます。
一文字は Java・C#・C・C++ では char(一重引用符 'a')で、Python・JS・TS・Craykon には別の型がなく長さ 1 の文字列です。
s = input()c = input()[0]print(s.find(c), s.rfind(c))const [s, line] = require("fs").readFileSync(0, "utf8").split("\n").map((x) => x.trim());const c = line[0];console.log(s.indexOf(c), s.lastIndexOf(c));import { readFileSync } from "node:fs";const [s, line]: string[] = readFileSync(0, "utf8").split("\n").map((x) => x.trim());const c: string = line[0];console.log(s.indexOf(c), s.lastIndexOf(c));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)); String s = br.readLine().trim(); char c = br.readLine().trim().charAt(0); System.out.println(s.indexOf(c) + " " + s.lastIndexOf(c)); }}using System; class Program{ static void Main() { string s = Console.ReadLine().Trim(); char c = Console.ReadLine().Trim()[0]; Console.WriteLine(s.IndexOf(c) + " " + s.LastIndexOf(c)); }}#include <iostream>#include <string> int main() { std::string s; char c; std::cin >> s >> c; size_t first = s.find(c); size_t last = s.rfind(c); std::cout << (first == std::string::npos ? -1 : (long long)first) << " " << (last == std::string::npos ? -1 : (long long)last) << "\n";}#include <stdio.h>#include <string.h> int main(void) { char s[1001]; char c; if (scanf("%1000s %c", s, &c) != 2) return 0; char *first = strchr(s, c); char *last = strrchr(s, c); printf("%d %d\n", first ? (int)(first - s) : -1, last ? (int)(last - s) : -1); return 0;}s = コンソール.行読み().空白除去();c = コンソール.行読み().空白除去()[0];first = s.位置検索(c);last = -1;繰り返す (i = s.長さ - 1; i >= 0; i--){ もし (s[i] == c) { last = i; 抜ける; }}コンソール.書く(first + " " + last);