哭了,href写成herf,结果硬是半天找不出bug。粗心害死人辣!
由于只有一层嵌套还是可以暴力写if else不写函数嵌套的。
本题模拟过程较为清晰简单。需要记忆的点在于int转string。
这里我采用了最慢的sstream。
stringstream ss;ss<<cnt;
string tt;ss>>tt; //string tt=ss.str();
还可以用
int n = 65535;char t[256];string s;
//sprintf(t, "%d", n);
itoa(n, t, 10);
s = t;
实际代码:
#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
using namespace std;
string line,tmp,t,link,text;
int flag=0,f2=0,f3=0,cnt;
void func(int x){
for(int i=0;i<line.size();i++){
if(line[i]=='_'&&f3==0){
f3=1;t+="<em>";
}
else if(line[i]=='_'&&f3==1){
f3=0;t+="</em>";
}
else if(line[i]=='['){
int j=i+1;
for(;line[j]!=']';j++){
if(line[j]=='_'&&f3==0){f3=1;text+="<em>";}
else if(line[j]=='_'&&f3==1){f3=0;text+="</em>";}
else text+=line[j];
}
i=j;
}
else if(line[i]=='('){
int j=i+1;
for(;line[j]!=')';j++){
if(line[j]=='_'&&f3==0){f3=1;link+="<em>";}
else if(line[j]=='_'&&f3==1){f3=0;link+="</em>";}
else link+=line[j];
}
i=j;
t+="<a href=\""+link+"\">"+text+"</a>";
text.clear(); link.clear();
}
else if(x==1){
if(line[i]=='#')cnt++;
else if(line[i]!=' '||t!="")t+=line[i];//非空格或者是内容中的空格,加入t
}
else if(x==2){
if(line[i]=='*')continue;
if(line[i]!=' '||t!="")t+=line[i];
}
else if(x==3)t+=line[i];
}
}
int main(){
#ifdef LOCAL
freopen("kk.txt","r",stdin);
#endif // LOCAL
while(getline(cin,line)){
if(line[0]=='#'){
cnt=0;
func(1);
stringstream ss;ss<<cnt;
string tt=ss.str();
tmp+="<h"+tt+">"+t+"</h"+tt+">";
}
else if(line[0]=='*'){
flag++;
if(flag==1){tmp+="<ul>\n";}
func(2);
tmp+="<li>"+t+"</li>\n";
}
else if(line==""){
if(flag!=0){tmp+="</ul>";flag=0;}
if(f2!=0){tmp+="</p>";f2=0;}
cout<<tmp<<endl;
tmp.clear();
}
else{
f2++;
if(f2==1)tmp+="<p>";
if(f2>1)tmp+="\n";
func(3);
tmp+=t;
}
t.clear();
}
if(tmp!=""){
if(flag!=0){tmp+="</ul>";flag=0;}
if(f2!=0){tmp+="</p>";f2=0;}
cout<<tmp;
}
return 0;
}
但是,如果题目要求更严格,链接和强调嵌套多了以后就不能这样写了。至于函数嵌套的写法,我比较欣赏这位同学的:传送门