더 나아가기 · 19
문자열 다루기
자르기, 찾기, 바꾸기, 앞뒤 공백 다듬기, 비교, 자리 맞추기.
입력을 받으면 다듬고(앞뒤 공백 빼기), 필요한 부분을 찾아서 잘라 쓰고, 모양을 바꿔 출력하는 일이 많아요.
아래 예제는 그 도구들을 차례로 써 봐요.
text = input().strip()date = input()a, b = input().split()n = input().strip()print(f"[{text}]")print(text[:5])i = text.find("World")print(i)print(text[i:i + 5])print(text.find("Bye"))print(date.replace("-", "/"))print((a > b) - (a < b))print(n.rjust(3, "0"))const lines = require("fs").readFileSync(0, "utf8").split("\n");const text = lines[0].trim();const date = lines[1].trim();const [a, b] = lines[2].trim().split(" ");const n = lines[3].trim();console.log(`[${text}]`);console.log(text.slice(0, 5));const i = text.indexOf("World");console.log(i);console.log(text.slice(i, i + 5));console.log(text.indexOf("Bye"));console.log(date.replaceAll("-", "/"));console.log(a < b ? -1 : a > b ? 1 : 0);console.log(n.padStart(3, "0"));import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const text: string = lines[0].trim();const date: string = lines[1].trim();const [a, b]: string[] = lines[2].trim().split(" ");const n: string = lines[3].trim();console.log(`[${text}]`);console.log(text.slice(0, 5));const i: number = text.indexOf("World");console.log(i);console.log(text.slice(i, i + 5));console.log(text.indexOf("Bye"));console.log(date.replaceAll("-", "/"));console.log(a < b ? -1 : a > b ? 1 : 0);console.log(n.padStart(3, "0"));import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String text = sc.nextLine().strip(); String date = sc.nextLine().strip(); String[] ab = sc.nextLine().strip().split(" "); String n = sc.nextLine().strip(); System.out.println("[" + text + "]"); System.out.println(text.substring(0, 5)); int i = text.indexOf("World"); System.out.println(i); System.out.println(text.substring(i, i + 5)); System.out.println(text.indexOf("Bye")); System.out.println(date.replace("-", "/")); System.out.println(Integer.signum(ab[0].compareTo(ab[1]))); System.out.println("0".repeat(Math.max(0, 3 - n.length())) + n); }}using System; class Program{ static void Main() { string text = Console.ReadLine().Trim(); string date = Console.ReadLine().Trim(); string[] ab = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); string n = Console.ReadLine().Trim(); Console.WriteLine($"[{text}]"); Console.WriteLine(text.Substring(0, 5)); int i = text.IndexOf("World", StringComparison.Ordinal); Console.WriteLine(i); Console.WriteLine(text.Substring(i, 5)); Console.WriteLine(text.IndexOf("Bye", StringComparison.Ordinal)); Console.WriteLine(date.Replace("-", "/")); Console.WriteLine(Math.Sign(string.CompareOrdinal(ab[0], ab[1]))); Console.WriteLine(n.PadLeft(3, '0')); }}#include <iomanip>#include <iostream>#include <string> std::string trim(const std::string& s) { size_t start = s.find_first_not_of(" \t\r\n"); if (start == std::string::npos) return ""; size_t end = s.find_last_not_of(" \t\r\n"); return s.substr(start, end - start + 1);} int main() { std::string text, date, a, b, n; std::getline(std::cin, text); std::getline(std::cin, date); std::cin >> a >> b >> n; text = trim(text); date = trim(date); std::cout << '[' << text << "]\n"; std::cout << text.substr(0, 5) << '\n'; size_t i = text.find("World"); std::cout << i << '\n'; std::cout << text.substr(i, 5) << '\n'; size_t miss = text.find("Bye"); std::cout << (miss == std::string::npos ? -1 : (long)miss) << '\n'; for (size_t p; (p = date.find('-')) != std::string::npos;) date.replace(p, 1, "/"); std::cout << date << '\n'; int c = a.compare(b); std::cout << (c > 0) - (c < 0) << '\n'; std::cout << std::setw(3) << std::setfill('0') << n << '\n';}#include <ctype.h>#include <stdio.h>#include <string.h> char *trim(char *s) { while (isspace((unsigned char)*s)) s++; char *end = s + strlen(s); while (end > s && isspace((unsigned char)end[-1])) *--end = '\0'; return s;} int main(void) { char line[1024], date[64], a[64], b[64]; int n; fgets(line, sizeof line, stdin); scanf("%63s %63s %63s %d", date, a, b, &n); char *text = trim(line); printf("[%s]\n", text); printf("%.5s\n", text); char *found = strstr(text, "World"); int i = found ? (int)(found - text) : -1; printf("%d\n", i); printf("%.5s\n", text + i); printf("%d\n", strstr(text, "Bye") ? (int)(strstr(text, "Bye") - text) : -1); for (char *p = date; *p; p++) if (*p == '-') *p = '/'; printf("%s\n", date); int c = strcmp(a, b); printf("%d\n", (c > 0) - (c < 0)); printf("%03d\n", n); return 0;}text = 콘솔.줄읽기().공백제거();date = 콘솔.줄읽기().공백제거();ab = 콘솔.줄읽기().나누기();n = 콘솔.줄읽기().공백제거();콘솔.쓰기("[" + text + "]");콘솔.쓰기(text.부분문자열(0, 5));i = text.자리찾기("World");콘솔.쓰기(i);콘솔.쓰기(text.부분문자열(i, 5));콘솔.쓰기(text.자리찾기("Bye"));콘솔.쓰기(date.바꾸기("-", "/"));만약 (ab[0] < ab[1]){ 콘솔.쓰기(-1);}아니면 만약 (ab[0] > ab[1]){ 콘솔.쓰기(1);}아니면{ 콘솔.쓰기(0);}콘솔.쓰기(n.앞채우기(3, "0"));Hello, World 2026-11-10 pear apple 7
[Hello, World] Hello 7 World -1 2026/11/10 1 007
핵심
- 다듬기는 앞뒤 공백을 빼요.
읽은 줄은 다듬고 쓰는 게 안전해요. - 찾기는 처음 나오는 자리를 돌려줘요.
없을 때는 대부분 -1이지만, 언어마다 달라요. - 자르기는 두 번째 숫자가 언어마다 달라요.
끝 자리(그 자리는 빼고)인 언어와 글자 수인 언어가 있어요. - 바꾸기는 대부분 모두 바꾸지만, JavaScript
replace는 처음 하나만 바꿔요. - 비교는 음수·0·양수를 돌려줘요.
부호만 믿어요.
값의 크기에는 뜻이 없어요. - 자리 맞추기는
7을007처럼 앞을 채워 폭을 맞춰요.
언어별로 쓰는 법
| Python | strip(), find(없으면 -1, index는 오류), t[7:12](끝 자리), replace(모두), rjust(3, "0") |
|---|---|
| JavaScript | trim(), indexOf, slice(7, 12)(끝 자리), replace는 처음 하나만·replaceAll은 모두, padStart(3, "0").localeCompare는 언어 설정을 따라요 |
| TypeScript | JavaScript와 같아요 |
| Java | strip(), indexOf, substring(7, 12)(끝 자리), replace(모두, replaceAll은 정규식), compareTo(부호만 믿기) |
| C# | Trim(), IndexOf, Substring(7, 5)(글자 수), Replace(모두), PadLeft(3, '0').string.Compare와 IndexOf(string)는 문화권을 따르니, 글자 코드 그대로 보려면 StringComparison.Ordinal이나 string.CompareOrdinal |
| C++ | 다듬기가 없어 직접 잘라요.find(없으면 std::string::npos), substr(7, 5)(글자 수), compare.모두 바꾸기는 반복으로. 자리 맞추기는 setw와 setfill |
| C | 다듬기·모두 바꾸기가 없어 직접 해요.strstr(없으면 NULL), 자르기는 printf("%.5s", text + 7)(시작 주소와 글자 수), 비교는 strcmp, 자리 맞추기는 printf("%03d") |
| Craykon | 공백제거(), 자리찾기(없으면 -1), 부분문자열(7, 5)(글자 수), 바꾸기(모두), 앞채우기(3, "0") |
자주 하는 실수
자르기의 두 번째 숫자를 헷갈렸어요C# · Java · JavaScript
"Hello, World".Substring(7, 12) // C#
"Hello, World".substring(7, 5) // Java, JavaScript→ C#은 범위 오류, Java도 오류. JavaScript는 두 수를 슬쩍 바꿔서 ", "를 돌려줘요
그 언어에서 두 번째 숫자가 끝 자리인지 글자 수인지 먼저 확인해요.
compareTo가 1을 돌려줄 줄 알았어요Java · C · C++ · C#
System.out.println("pear".compareTo("apple"));→ 15 — 'p' - 'a'예요
> 0, < 0처럼 부호만 봐요.
replace가 모두 바꿀 줄 알았어요JavaScript · TypeScript
console.log("2026-11-10".replace("-", "/"));→ 2026/11-10 — 처음 하나만 바뀌어요
모두 바꾸려면 replaceAll.
Java replaceAll은 정규식이라 "a.b".replaceAll(".", "-")가 "---"인 점도 조심해요.
언어마다 다른 점
Windows에서 만든 입력은 줄 끝이
Java
Windows에서 만든 입력은 줄 끝이
\r\n이에요.Java
nextLine()·C# ReadLine()·크레이콘 줄읽기()는 \r까지 떼지만, Python input()(리눅스·macOS)·JavaScript split("\n")·C fgets·C++ getline은 남겨서 "World\r" == "World"가 거짓이 되니, 읽은 줄은 다듬고 쓰세요.