# String Manipulation# Output Generation# Standard Input

j061 - 11483 - Code Creator

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據輸入的字串,生成一個 C++ 程式碼,該程式碼會輸出輸入的字串。程式碼的格式固定,需要包含特定的 header file,並且使用 printf 函數輸出字串。需要注意的是,字串中的雙引號和反斜線需要進行轉義。

解題思路

這題的解題思路非常直接。題目要求生成特定格式的 C 程式碼,程式碼的內容是根據輸入的字串來決定的。程式需要讀取輸入的整數 n,表示接下來有 n 行字串。然後,對於每一行字串,程式需要將其轉換為 printf 語句,並將字串中的雙引號和反斜線進行轉義。最後,將生成的 printf 語句添加到 C 程式碼中,並輸出完整的 C 程式碼。

複雜度分析

  • 時間複雜度: O(N * M),其中 N 是輸入的行數,M 是每行字串的長度。這是因為程式需要遍歷每一行字串,並對字串中的每個字元進行處理。
  • 空間複雜度: O(N * M),其中 N 是輸入的行數,M 是每行字串的長度。這是因為程式需要儲存輸入的字串,以及生成的 C 程式碼。

程式碼

#include <bits/stdc++.h>
using namespace std;
main() {
	cin.tie(0); ios::sync_with_stdio(0);
    int n;
    string s;
    for(int ca=1;cin >> n;++ca){
        getline(cin,s);
        if(n == 0)break;
        cout << "Case " << ca << ":\n#include<string.h>\n#include<stdio.h>\nint main()\n{\n";
        for(int i = 0;i < n;i++){
            getline(cin,s);
            cout << "printf(\"";
            for(int j=0;j<s.size();++j){
            	if(s[j]=='\\')
            		cout << "\\\\";
				else if(s[j]=='"')
					cout << "\\\"";
				else
					cout << s[j];
			}
            cout << "\\n\");\n";
        }
        cout << "printf(\"\\n\");\nreturn 0;\n}\n";
    }
}

Discussion