我的天啊,这是什么神仙题啊,完全不知道自己错哪里了。。。头发都掉光了,才60分啊!!!
你们说说,这ACM好歹知道自己错了,然后再改。这CCF还看不到,高高兴兴以为自己能100分,然后0分~~~
别动让我哭一会儿~~~~
抄的这位老哥的代码,然后自己再尝试着写。。。
https://www.cnblogs.com/from00/p/6663592.html
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
string str[105];
string tmp1;
void output(string str)
{
int len=str.length();
for(int i=0;i<len;i++)
{
if(str[i]=='_')
{
int r=str.find('_',i+1);//我就不理解了,我遇到下划线就输出<em>不行吗,我用flag控制,判断是否遇到第二个下划线,再输出</em>就不行????
string tmp="<em>"+str.substr(i+1,r-i-1)+"</em>";
cout<<tmp;
i=r;
}else if(str[i]=='[')
{
int r=str.find(']',i+1);
tmp1=str.substr(i+1,r-i-1);
i=r;
}else if(str[i]=='(')
{
int r=str.find(')',i+1);
string tmp2=str.substr(i+1,r-i-1);
i=r;
cout<<"<a href=\""+tmp2+"\">"+tmp1+"</a>";//这个双引号怎么输出还是得注意一下
}
else
{
printf("%c",str[i]);
}
}
}
void passage(int cnt)
{
printf("<p>");
for(int i=0;i<cnt;i++)
{
output(str[i]);
if(i==cnt-1)
printf("</p>");
cout<<endl;
}
}
void headline()
{
int len=str[0].length(),pos;
int count=0;
for(int i=0;i<len;i++)
{
if(str[0][i]=='#')
{
count++;
}
else if(str[0][i]!='#'&&str[0][i]!=' ')
{
pos=i;
break;
}
}
printf("<h%d>",count);
cout<<str[0].substr(pos);
printf("</h%d>\n",count);//换行一定要加啊!!!
}
void list(int cnt)
{
printf("<ul>\n");
int pos;
for(int i=0;i<cnt;i++)
{
for(int j=0;j<str[i].length();j++)
{
if(str[i][j]!='*'&&str[i][j]!=' ')
{
pos=j;
break;//break一定要加,不加就剩最后一个字符了
}
}
printf("<li>");
cout<<str[i].substr(pos);
printf("</li>\n");
}
printf("</ul>\n");
}
int main()
{
std::string line;
int cnt=0;
while(std::getline(std::cin,line))
{
if(line=="")
{
if(cnt==0)continue;//万一前面全是空行
if(str[0][0]=='#')headline();
else if(str[0][0]=='*')list(cnt);
else passage(cnt);
cnt=0;
continue;//不能将空行赋值给str
}
str[cnt++]=line;
}
if(cnt)//就是不知道为啥加这段代码,不加就0分啊!!!
{
if(str[0][0]=='#')headline();
else if(str[0][0]=='*')list(cnt);
else passage(cnt);
}
return 0;
}
Markdown转HTML代码解析
2487

被折叠的 条评论
为什么被折叠?



