招牌店会把顾客选的花样单词的大小写样子原样印到新单词上。 第一行给出单词对的数量 n,接下来 n 行每行给出一对:花样单词 p 和目标单词 w,用一个空格分开。 w 的第 i 个字符(从 0 数起)跟随 p 的第(i 除以 p 的长度的余数)个字符。 所以 p 比 w 短时,p 的花样会从头重复。 跟随的 p 字符是大写英文字母,就把 w 的字符变成大写;是小写英文字母,就变成小写。 跟随的 p 字符是数字,就不改变 w 的字符。 w 中的数字不管花样如何总是保持不变,已经是大写的字母再变成大写也不变。 对每一对,把改好的 w 输出为一行。
输入
1 ≤ n ≤ 1,000。 p 和 w 由大小写英文字母和数字组成,1~20 个字符
输出
n 行,每行是改好的 w
样例 1 · stdin
3
HeLLo worlds
Ab codelper
x9Y PIZZA42
stdout
WoRLdS
CoDeLpEr
pIZzA42
main.py
错误列表00F8 ↓ · ⇧F8 ↑
输入(stdin)
运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。
$ 就绪
请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。
其他语言怎么写?查看各语言题解 · 8 种语言题解
判断是否大写、以及转换大小写的方法因语言而异。 Python m.isupper()/islower()、Java Character.isUpperCase、C# char.IsUpper、C/C++ <ctype.h> 的 isupper/toupper 处理单个字符;JS、TS、Craykon 没有这样的函数,要像 m >= "A" && m <= "Z" 这样按范围比较。 常见陷阱是用 m == m.upper()(JS m === m.toUpperCase())判断大写。 数字转大写后不变,所以 "7" 会被当成大写。 转换这边,Python upper()、JS/TS toUpperCase()、Craykon 大写() 会让非字母保持原样,不用担心。 在 C 里直接用 w[i] - 32 转换,已经是大写的字母和数字会被弄坏,所以要用 toupper 或先检查范围。 C++ std::toupper 返回 int,std::cout << std::toupper(c) 会输出 "65" 这样的数字,要转回 char。 Java String.toUpperCase() 和 C# char.ToUpper 跟随地区(文化)设置,在土耳其语里 i 会变成 İ,所以只处理英文字母时,Java Character.toUpperCase(char) 或 C# ToUpperInvariant 更安全。 花样重复的位置是 i % p.length。
Pythonmain.py · 12 行
n = int(input())for _ in range(n): p, w = input().split() out = [] for i, ch in enumerate(w): m = p[i % len(p)] # 무늬가 짧으면 처음부터 되풀이 if m.isupper(): # "7".isupper()는 False — 숫자는 대문자도 소문자도 아니다 ch = ch.upper() elif m.islower(): ch = ch.lower() out.append(ch) print("".join(out))
JavaScriptmain.js · 18 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);const isUpper = (c) => c >= "A" && c <= "Z";const isLower = (c) => c >= "a" && c <= "z";const out = [];for (let k = 1; k <= n; k++) { const [p, w] = lines[k].trim().split(" "); let s = ""; for (let i = 0; i < w.length; i++) { const m = p[i % p.length]; // "7" === "7".toUpperCase()도 참이라, 같은지로 대문자를 가리면 숫자가 대문자로 친다 if (isUpper(m)) s += w[i].toUpperCase(); else if (isLower(m)) s += w[i].toLowerCase(); else s += w[i]; } out.push(s);}console.log(out.join("\n"));
TypeScriptmain.ts · 18 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);const isUpper = (c: string): boolean => c >= "A" && c <= "Z";const isLower = (c: string): boolean => c >= "a" && c <= "z";const out: string[] = [];for (let k = 1; k <= n; k++) { const [p, w]: string[] = lines[k].trim().split(" "); let s = ""; for (let i = 0; i < w.length; i++) { const m: string = p[i % p.length]; if (isUpper(m)) s += w[i].toUpperCase(); else if (isLower(m)) s += w[i].toLowerCase(); else s += w[i]; } out.push(s);}console.log(out.join("\n"));
JavaMain.java · 25 行
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 n = Integer.parseInt(br.readLine().trim()); StringBuilder out = new StringBuilder(); for (int k = 0; k < n; k++) { String[] parts = br.readLine().trim().split(" "); String p = parts[0]; String w = parts[1]; for (int i = 0; i < w.length(); i++) { char m = p.charAt(i % p.length()); char c = w.charAt(i); // Character.toUpperCase(char)는 지역 설정과 상관없다(String.toUpperCase()는 지역 설정을 따른다) if (Character.isUpperCase(m)) c = Character.toUpperCase(c); else if (Character.isLowerCase(m)) c = Character.toLowerCase(c); out.append(c); } out.append('\n'); } System.out.print(out); }}
C#Main.cs · 27 行
using System;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine().Trim()); var sb = new StringBuilder(); for (int k = 0; k < n; k++) { string[] parts = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); string p = parts[0], w = parts[1]; for (int i = 0; i < w.Length; i++) { char m = p[i % p.Length]; char c = w[i]; // char.ToUpper(c)는 지금 문화권을 따른다. 영어 글자만 다룰 때는 ToUpperInvariant가 안전하다 if (char.IsUpper(m)) c = char.ToUpperInvariant(c); else if (char.IsLower(m)) c = char.ToLowerInvariant(c); sb.Append(c); } sb.Append('\n'); } Console.Write(sb); }}
C++main.cpp · 21 行
#include <cctype>#include <iostream>#include <string>int main() { std::ios::sync_with_stdio(false); int n; std::cin >> n; for (int k = 0; k < n; k++) { std::string p, w; std::cin >> p >> w; for (std::size_t i = 0; i < w.size(); i++) { unsigned char m = p[i % p.size()]; unsigned char c = w[i]; // std::toupper는 int를 돌려주므로 char로 되돌려 담는다 if (std::isupper(m)) w[i] = static_cast<char>(std::toupper(c)); else if (std::islower(m)) w[i] = static_cast<char>(std::tolower(c)); } std::cout << w << '\n'; }}
Cmain.c · 21 行
#include <ctype.h>#include <stdio.h>#include <string.h>int main(void) { int n; scanf("%d", &n); for (int k = 0; k < n; k++) { char p[32], w[32]; scanf("%31s %31s", p, w); size_t lp = strlen(p); for (size_t i = 0; w[i] != '\0'; i++) { unsigned char m = (unsigned char)p[i % lp]; /* toupper·tolower는 영어 글자가 아니면 그대로 돌려준다 */ if (isupper(m)) w[i] = (char)toupper((unsigned char)w[i]); else if (islower(m)) w[i] = (char)tolower((unsigned char)w[i]); } puts(w); } return 0;}
Craykonmain.cray · 26 行
n = 控制台.读行().转数字();循环 (k = 0; k < n; k++){ parts = 控制台.读行().去空白().分割(" "); p = parts[0]; w = parts[1]; s = ""; 循环 (i = 0; i < w.长度; i++) { m = p[i % p.长度]; // 숫자는 대문자로 바꿔도 그대로라서, 크기 비교로 영어 글자인지부터 가린다 如果 (m >= "A" && m <= "Z") { s = s + w[i].大写(); } 否则 如果 (m >= "a" && m <= "z") { s = s + w[i].小写(); } 否则 { s = s + w[i]; } } 控制台.输出(s);}