我现在瞄准了h1,h2,i的判断,本地AC,洛谷20pts+1RE,求查错:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
string c;
while(getline(cin, s))
{
bool lh1, lh2, rh1, rh2, li1, ri1; //判断是否匹配
lh1 = lh2 = rh1 = rh2 = li1 = ri1 = 0; //初始化为0
int len = s.length();
int j = 0;
for(int i = 0; i < len; i++) //先判断是否合法
{
if(s[i] == '[' && s[i + 1] == 'h' && s[i + 2] == '1' && s[i + 3] == ']')
{
lh1 = 1; //当看到[h1]字样时,lh1=1
}
if(s[i] == '[' && s[i + 1] == 'i' && s[i + 2] == ']')
{
li1 = 1; //当看到[i]字样时,li1=1
}
if(s[i] == '[' && s[i + 1] == 'h' && s[i + 2] == '2' && s[i + 3] == ']')
{
lh2 = 1; //当看到[h2]字样时,lh2=1
}
if(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'h' && s[i + 3] == '1' && s[i + 4] == ']')
{
rh1 = 1; //当看到[/h1]字样时,rh1=1
}
if(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'i' && s[i + 3] == ']')
{
ri1 = 1; //当看到[/i]字样时,ri1=1
}
if(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'h' && s[i + 3] == '2' && s[i + 4] == ']')
{
rh2 = 1; //当看到[/h2]字样时,rh2=1
}
}
//printf("\n%d %d %d %d\n", lh1, lh2, rh1, rh2);
if(lh1 && !rh1 || !lh1 && rh1 || lh2 && !rh2 || !lh2 && rh2 || li1 && !ri1 || !li1 && ri1)
{
printf("%s", "Unclosed");
printf("%s", " Mark");
return 0;
}
for(int i = 0; i < len; i++) //再输出
{
if(s[i] == '[' && s[i + 1] == 'h' && s[i + 2] == '1' && s[i + 3] == ']')
{
printf("%c ", '#');
for(int j = i + 4; s[j] != '['; j++)
{
printf("%c", s[j]);
}
}
if(s[i] == '[' && s[i + 1] == 'h' && s[i + 2] == '2' && s[i + 3] == ']')
{
printf("%s", "## ");
for(int j = i + 4; s[j] != '['; j++)
{
printf("%c", s[j]);
}
}
if(s[i] == '[' && s[i + 1] == 'i' && s[i + 2] == ']')
{
printf("%c", '*');
for(int j = i + 3; s[j] != '['; j++)
{
printf("%c", s[j]);
}
}
if(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'h' && s[i + 3] == '1' && s[i + 4] == ']')
{
printf(" %c", '#');
for(int j = i + 5; s[j] != '[' && j < len; j++)
{
printf("%c", s[j]);
}
}
if(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'h' && s[i + 3] == '2' && s[i + 4] == ']')
{
printf("%s", " ##");
for(int j = i + 5; s[j] != '[' && j < len; j++)
{
printf("%c", s[j]);
}
}
if(s[i] == '[' && s[i + 1] == '/' && s[i + 2] == 'i' && s[i + 3] == ']')
{
printf("%c", '*');
for(int j = i + 4; s[j] != '[' && j < len; j++)
{
printf("%c", s[j]);
}
}
}
printf("\n");
}
return 0;
}