呵呵,寫了個簡單的,又臭又長,希望對妳有幫助。。。
#include?<iostream>#include?<fstream>
using?namespace?std;
const?int?line_len?=?1000;
const?int?statement_len?=?1000;
int?my_strcmp(char?*s1,?char?*s2);
int?my_strlen(char?*str);
int?remove_blank_back(char?*str);
int?remove_blank_front(char?*str);
void?fill_blank(int?n,?ofstream?&fout);
bool?start_with(char?*str,?char?*word);
bool?end_with(char?*str,?char?*word);
int?get_statement(char?*str,?char?*statement);
void?handle_line(char?*str,?ofstream?&fout);
void?handle_statement(char?*str,?ofstream?&fout);
int?main()
{
ifstream?fin("test.ming"); ofstream?fout("test.cpp"); char?line[line_len]; int?len1,?len2; bool?start_flag?=?false; fout?<<?"#include?<iostream>\n"; fout?<<?"using?namesapce?std;\n\n"; fout?<<?"int?main()\n"; while?(fin.getline(line,?line_len)) { len1?=?remove_blank_back(line); len2?=?remove_blank_front(line); if?(!start_flag?&&?my_strcmp(line,?"kaishi"))continue;
else?if?(!start_flag?&&?!my_strcmp(line,?"kaishi")) {start_flag?=?true;
fill_blank(len1?-?len2,?fout);
fout?<<?"{\n";
} else {fill_blank(len1?-?len2,?fout);
handle_line(line,?fout);
} } fin.clear(); fin.close(); fout.clear(); fout.close();}
int?my_strcmp(char?*s1,?char?*s2)
{
int?i?=?0; for?(;?s1[i]?!=?'\0'?&&?s2[i]?!=?'\0';?i++) if?(s1[i]?!=?s2[i])return?s1[i]?-?s2[i];
if?(s1[i]?!=?'\0') return?s1[i]; if?(s2[i]?!=?'\0') return?-s2[i]; return?0;}
int?my_strlen(char?*str)
{
int?i?=?0; while?(str[i]?!=?'\0') i++; return?i;}
int?remove_blank_back(char?*str)
{
int?len?=?my_strlen(str); while?(str[len?-?1]?==?'?'?||?str[len?-?1]?==?'\t') len--; str[len]?=?'\0'; return?len;}
int?remove_blank_front(char?*str)
{
int?i?=?0,?j?=?0; while?(str[i]?!=?'\0'?&&?(str[i]?==?'?'?||?str[i]?==?'\t')) i++; for?(;?str[i]?!=?'\0';?i++,?j++) str[j]?=?str[i]; str[j]?=?'\0'; return?j;}
void?fill_blank(int?n,?ofstream?&fout)
{
for?(int?i?=?0;?i?<?n;?i++) fout?<<?'?';}
int?get_statement(char?*str,?char?*statement)
{
int?i?=?0,?j; remove_blank_front(str); for?(;?str[i]?!=?'\0'?&&?str[i]?!=?';';?i++) statement[i]?=?str[i]; if?(str[i]?==?';') statement[i++]?=?';'; statement[i]?=?'\0'; for?(j?=?i;?str[j]?!=?'\0';?j++) str[j?-?i]?=?str[j]; str[j?-?i]?=?'\0'; return?i;}
void?handle_line(char?*str,?ofstream?&fout)
{
char?statement[statement_len]; int?len1,?len2; len1?=?remove_blank_back(str); len2?=?remove_blank_front(str); while?(len2) { fill_blank(len1?-?len2,?fout); get_statement(str,?statement); handle_statement(statement,?fout); len1?=?len2; len2?=?remove_blank_front(str); } fout?<<?endl;}
void?handle_statement(char?*str,?ofstream?&fout)
{
if?(!my_strcmp(str,?"kaishi")) fout?<<?"{"; else?if?(!my_strcmp(str,?"jieshu")) fout?<<?"}"; else?if?(start_with(str,?"shuru")) { fout?<<?"cin?>>?"; for?(int?i?=?0;?str[i]?!=?'\0';?i++)if?(str[i]?==?',')
fout?<<?"?>>?";
else?if?(str[i]?!=?'?')
fout?<<?str[i];
} else?if?(start_with(str,?"xunhuan")) { remove_blank_front(str); fout?<<?"while?("?<<?str?<<?")"; } else?if?(start_with(str,?"ruguo")) { remove_blank_front(str); fout?<<?"if?("?<<?str?<<?")"; } else?if?(start_with(str,?"shuchu")) { fout?<<?"cout?<<?"; for?(int?i?=?0;?str[i]?!=?'\0';?i++)if?(str[i]?==?',')
fout?<<?"?<<?";
else?if?(str[i]?!=?'?')
fout?<<?str[i];
} else?if?(end_with(str,?"zhengxing;")) fout?<<?"int?"?<<?str?<<?';'; else?if?(end_with(str,?"shixing;")) fout?<<?"float?"?<<?str?<<?';'; else fout?<<?str;}
bool?start_with(char?*str,?char?*word)
{
int?i?=?0,?j?=?0; for?(;?str[i]?!=?'\0'?&&?word[i]?!=?'\0';?i++) if?(str[i]?!=?word[i])return?false;
if?(word[i]?!=?'\0') return?false; for?(j?=?i;?str[j]?!=?'\0';?j++) str[j?-?i]?=?str[j]; str[j?-?i]?=?'\0'; return?true;}
bool?end_with(char?*str,?char?*word)
{
int?len_str,?len_word; len_str?=?my_strlen(str); len_word?=?my_strlen(word); int?i?=?len_str?-?1; int?j?=?len_word?-?1; for?(;?i?>=?0?&&?j?>=?0;?i--,?j--) if?(str[i]?!=?word[j])return?false;
if?(j?>=?0) return?false; str[i?+?1]?=?'\0'; return?true;}