社区讨论
如果您是压行爱好者
学术版参与者 8已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @miihp11p
- 此快照首次捕获于
- 2025/11/28 14:36 3 个月前
- 此快照最后确认于
- 2025/11/29 14:50 3 个月前
那您一定不要错过这个:
CPP#include <bits/stdc++.h>
enum State{NORMAL,STRING_LITERAL,CHAR_LITERAL,SLASH,LINE_COMMENT,BLOCK_COMMENT,BLOCK_COMMENT_ENDING,PREPROCESSOR};bool is_space_or_newline(char c){return c==' '||c=='\t'||c=='\n'||c=='\r'||c=='\f'||c=='\v';}bool is_symbol(char c){return c=='{'||c=='}'||c=='('||c==')'||c=='['||c==']'||c==';'||c==','||c=='='||c=='+'||c=='-'||c=='*'||c=='/'||c=='%'||c=='!'||c=='<'||c=='>'||c=='&'||c=='|'||c=='^'||c=='~'||c=='?';}int main(int argc,char*argv[]){std::ios::sync_with_stdio(0);std::cin.tie(0),std::cout.tie(0);if(argc!=3){std::cerr<<"Usage: "<<argv[0]<<" <input_file.cpp> <output_file.cpp>"<<'\n';return 1;}std::ifstream inFile(argv[1]);if(!inFile){std::cerr<<"Error: Could not open input file "<<argv[1]<<'\n';return 1;}std::ofstream outFile(argv[2]);if(!outFile){std::cerr<<"Error: Could not create output file "<<argv[2]<<'\n';return 1;}std::string content((std::istreambuf_iterator<char>(inFile)),std::istreambuf_iterator<char>());std::string result="";State state=NORMAL;bool just_exited_preprocessor=false;for(size_t i=0;i<content.length();++i){char c=content[i];char next=(i+1<content.length())?content[i+1]:'\0';switch(state){case NORMAL:if(c=='/'){state=SLASH;}else if(c=='"'){state=STRING_LITERAL;result+=c;}else if(c=='\''){state=CHAR_LITERAL;result+=c;}else if(c=='#'){if(!result.empty()&&result.back()!='\n'){result+='\n';}state=PREPROCESSOR;result+=c;}else if(is_space_or_newline(c)){if(result.empty())continue;char last=result.back();if(is_space_or_newline(last))continue;if(last=='\n')continue;result+=' ';}else{result+=c;}break;case SLASH:if(c=='/'){state=LINE_COMMENT;}else if(c=='*'){state=BLOCK_COMMENT;}else{state=NORMAL;result+='/';if(c=='"'){state=STRING_LITERAL;result+=c;}else if(c=='\''){state=CHAR_LITERAL;result+=c;}else if(is_space_or_newline(c)){result+=' ';}else{result+=c;}}break;case LINE_COMMENT:if(c=='\n'){state=NORMAL;if(!result.empty()&&!is_space_or_newline(result.back())){result+=' ';}}break;case BLOCK_COMMENT:if(c=='*'){state=BLOCK_COMMENT_ENDING;}break;case BLOCK_COMMENT_ENDING:if(c=='/'){state=NORMAL;if(!result.empty()&&!is_space_or_newline(result.back())){result+=' ';}}else if(c!='*'){state=BLOCK_COMMENT;}break;case STRING_LITERAL:result+=c;if(c=='\\'){if(next!='\0'){result+=next;i++;}}else if(c=='"'){state=NORMAL;}break;case CHAR_LITERAL:result+=c;if(c=='\\'){if(next!='\0'){result+=next;i++;}}else if(c=='\''){state=NORMAL;}break;case PREPROCESSOR:result+=c;if(c=='\\'&&next=='\n'){result+=next;i++;}else if(c=='\n'){state=NORMAL;}break;}}std::string optimized="";for(size_t i=0;i<result.length();++i){char c=result[i];if(c=='#'){while(i<result.length()&&result[i]!='\n'){optimized+=result[i];i++;}if(i<result.length())optimized+=result[i];continue;}if(c=='"'||c=='\''){char quote=c;optimized+=c;i++;while(i<result.length()){optimized+=result[i];if(result[i]=='\\'){i++;if(i<result.length())optimized+=result[i];}else if(result[i]==quote){break;}i++;}continue;}if(c==' '){char prev=(optimized.empty())?'\0':optimized.back();char next=(i+1<result.length())?result[i+1]:'\0';bool prevIsAlpha=(isalnum(prev)||prev=='_');bool nextIsAlpha=(isalnum(next)||next=='_');if(prevIsAlpha&&nextIsAlpha){optimized+=c;}}else{optimized+=c;}}outFile<<optimized;std::cout<<"Success! Code compressed."<<'\n';return 0;}
Gemini 最新力作:C++ Code Minifier Tool
可以把除了#include和#define之外的东西压到一行
由于我对它使用了它自己,所以它现在只有两行
简直食用极辣(
回复
共 10 条回复,欢迎继续交流。
正在加载回复...