import csvimport sys# csv 모듈이 따옴표 필드, 안의 쉼표, "" → " 를 모두 처리해 준다for fields in csv.reader(sys.stdin): print(len(fields), "".join(f"[{f}]" for f in fields))
JavaScriptmain.js · 30 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");if (lines.at(-1) === "") lines.pop(); // 마지막 줄 바꿈 뒤의 빈 조각function parse(s) { const fields = []; let i = 0; while (true) { let field = ""; if (s[i] === '"') { i++; // 여는 따옴표 while (true) { if (s[i] === '"') { if (s[i + 1] === '"') { field += '"'; i += 2; } // "" → " else { i++; break; } // 닫는 따옴표 } else field += s[i++]; } } else { let j = s.indexOf(",", i); if (j === -1) j = s.length; field = s.slice(i, j); i = j; } fields.push(field); if (i >= s.length) break; // 줄 끝 i++; // 쉼표 건너뛰기(쉼표로 끝나면 다음 바퀴에 빈 필드) } return fields;}console.log(lines.map((s) => { const f = parse(s); return `${f.length} ` + f.map((x) => `[${x}]`).join(""); }).join("\n"));
TypeScriptmain.ts · 31 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");if (lines.at(-1) === "") lines.pop(); // 마지막 줄 바꿈 뒤의 빈 조각function parse(s: string): string[] { const fields: string[] = []; let i = 0; while (true) { let field = ""; if (s[i] === '"') { i++; // 여는 따옴표 while (true) { if (s[i] === '"') { if (s[i + 1] === '"') { field += '"'; i += 2; } // "" → " else { i++; break; } // 닫는 따옴표 } else field += s[i++]; } } else { let j: number = s.indexOf(",", i); if (j === -1) j = s.length; field = s.slice(i, j); i = j; } fields.push(field); if (i >= s.length) break; // 줄 끝 i++; // 쉼표 건너뛰기(쉼표로 끝나면 다음 바퀴에 빈 필드) } return fields;}console.log(lines.map((s: string): string => { const f = parse(s); return `${f.length} ` + f.map((x) => `[${x}]`).join(""); }).join("\n"));
JavaMain.java · 47 行
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;public class Main { static List<String> parse(String s) { List<String> fields = new ArrayList<>(); int i = 0; while (true) { StringBuilder field = new StringBuilder(); if (i < s.length() && s.charAt(i) == '"') { i++; // 여는 따옴표 while (true) { char c = s.charAt(i); if (c == '"') { if (i + 1 < s.length() && s.charAt(i + 1) == '"') { field.append('"'); i += 2; } // "" → " else { i++; break; } // 닫는 따옴표 } else { field.append(c); i++; } } } else { int j = s.indexOf(',', i); if (j == -1) j = s.length(); field.append(s, i, j); i = j; } fields.add(field.toString()); if (i >= s.length()) break; i++; // 쉼표 } return fields; } public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringBuilder out = new StringBuilder(); String line; while ((line = in.readLine()) != null) { List<String> f = parse(line); out.append(f.size()).append(' '); for (String x : f) out.append('[').append(x).append(']'); out.append('\n'); } System.out.print(out); }}
C#Main.cs · 54 行
using System;using System.Collections.Generic;using System.Text;class Program{ static List<string> Parse(string s) { var fields = new List<string>(); int i = 0; while (true) { var field = new StringBuilder(); if (i < s.Length && s[i] == '"') { i++; // 여는 따옴표 while (true) { if (s[i] == '"') { if (i + 1 < s.Length && s[i + 1] == '"') { field.Append('"'); i += 2; } // "" → " else { i++; break; } // 닫는 따옴표 } else field.Append(s[i++]); } } else { int j = s.IndexOf(',', i); if (j == -1) j = s.Length; field.Append(s, i, j - i); i = j; } fields.Add(field.ToString()); if (i >= s.Length) break; i++; // 쉼표 } return fields; } static void Main() { var sb = new StringBuilder(); string line; while ((line = Console.ReadLine()) != null) { var f = Parse(line); sb.Append(f.Count).Append(' '); foreach (string x in f) sb.Append('[').Append(x).Append(']'); sb.Append('\n'); } Console.Write(sb); }}
C++main.cpp · 39 行
#include <iostream>#include <string>#include <vector>static std::vector<std::string> parse(const std::string& s) { std::vector<std::string> fields; std::size_t i = 0; while (true) { std::string field; if (i < s.size() && s[i] == '"') { i++; // 여는 따옴표 while (true) { if (s[i] == '"') { if (i + 1 < s.size() && s[i + 1] == '"') { field += '"'; i += 2; } // "" → " else { i++; break; } // 닫는 따옴표 } else field += s[i++]; } } else { auto j = s.find(',', i); if (j == std::string::npos) j = s.size(); field = s.substr(i, j - i); i = j; } fields.push_back(field); if (i >= s.size()) break; i++; // 쉼표 } return fields;}int main() { std::string line; while (std::getline(std::cin, line)) { auto f = parse(line); std::cout << f.size() << ' '; for (const auto& x : f) std::cout << '[' << x << ']'; std::cout << '\n'; }}
Cmain.c · 32 行
#include <stdio.h>#include <string.h>int main(void) { static char s[512]; static char out[1024]; while (fgets(s, sizeof s, stdin)) { s[strcspn(s, "\n")] = '\0'; int len = (int)strlen(s), i = 0, count = 0, o = 0; while (1) { out[o++] = '['; if (s[i] == '"') { i++; /* 여는 따옴표 */ while (1) { if (s[i] == '"') { if (s[i + 1] == '"') { out[o++] = '"'; i += 2; } /* "" → " */ else { i++; break; } /* 닫는 따옴표 */ } else out[o++] = s[i++]; } } else { while (i < len && s[i] != ',') out[o++] = s[i++]; } out[o++] = ']'; count++; if (i >= len) break; i++; /* 쉼표 */ } out[o] = '\0'; printf("%d %s\n", count, out); } return 0;}
Craykonmain.cray · 63 行
s = コンソール.行読み();間 (s != なし){ fields = parseLine(s); out = fields.個数 + " "; それぞれ (f の中 fields) { out += "[" + f + "]"; } コンソール.書く(out); s = コンソール.行読み();}// 한 줄을 필드 목록으로: 따옴표 필드 안의 쉼표는 글자, "" 는 따옴표 하나parseLine(s){ fields = []; i = 0; 間 (真) { field = ""; もし (i < s.長さ && s[i] == "\"") { i += 1; 間 (真) { もし (s[i] == "\"") { もし (i + 1 < s.長さ && s[i + 1] == "\"") { field += "\""; i += 2; } でなければ { i += 1; 抜ける; } } でなければ { field += s[i]; i += 1; } } } でなければ { 間 (i < s.長さ && s[i] != ",") { field += s[i]; i += 1; } } fields.追加(field); もし (i >= s.長さ) { 抜ける; } i += 1; } 返す fields;}