题目要求:
#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
char m[100];
int len = 0, i;
gets(m);
while (1)
{
for (i = 0; i < strlen(m); i++)
{
if (m[i] == '/' && m[i + 1] == '*' && (i + 1) < strlen(m))
{
a[++len] = '/';
a[++len] = '*';
i++;
}
else if (m[i] == '(' || m[i] == '[' || m[i] == '{')
{
a[++len] = m[i];
}
else if (m[i] == '*' && m[i + 1] == '/' && (i + 1) < strlen(m))
{
i++;
if (a[len] = '*' && a[len - 1] == '/' && len != 0)
len = len - 2;
else
{
printf("NO\n");
if (len == 0)
printf("?-*/\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
else if (m[i] == ')')
{
if (a[len] = '(')
len--;
else
{
printf("NO\n");
if (len == 0)
printf("?-)\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
else if (m[i] == ']')
{
if (a[len] = '[')
len--;
else
{
printf("NO\n");
if (len == 0)
printf("?-]\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
else if (m[i] == '}')
{
if (a[len] = '{')
len--;
else
{
printf("NO\n");
if (len == 0)
printf("?-}\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
}
gets(m);
if (strlen(m) == 1 && m[0] == '.')
break;
}
if (len == 0)
printf("YES\n");
else
{
printf("NO\n");
if (a[len] == '*' || a[len] == '/')
printf("%c%c-?\n", a[len - 1], a[len]);
else if (a[len] == '[' || a[len] == '{' || a[len] == '(')
printf("%c-?\n", a[len]);
else if (a[len] == ']' || a[len] == '}' || a[len] == ')')
printf("?-%c", a[len]);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
int main()
{
char a[MAX_SIZE];
char m[MAX_SIZE];
int len = 0, i;
fgets(m, MAX_SIZE, stdin);
while (1)
{
for (i = 0; i < strlen(m); i++)
{
if (m[i] == '/' && m[i + 1] == '*' && (i + 1) < strlen(m))
{
a[++len] = '/';
a[++len] = '*';
i++;
}
else if (m[i] == '(' || m[i] == '[' || m[i] == '{')
{
a[++len] = m[i];
}
else if (m[i] == '*' && m[i + 1] == '/' && (i + 1) < strlen(m))
{
i++;
if (a[len] == '*' && a[len - 1] == '/' && len != 0)
len = len - 2;
else
{
printf("NO\n");
if (len == 0)
printf("?-*/\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
else if (m[i] == ')')
{
if (a[len] == '(')
len--;
else
{
printf("NO\n");
if (len == 0)
printf("?-)\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
else if (m[i] == ']')
{
if (a[len] == '[')
len--;
else
{
printf("NO\n");
if (len == 0)
printf("?-]\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
else if (m[i] == '}')
{
if (a[len] == '{')
len--;
else
{
printf("NO\n");
if (len == 0)
printf("?-}\n");
else
printf("%c-?\n", a[len]);
return 0;
}
}
}
fgets(m, MAX_SIZE, stdin);
if (strlen(m) == 2 && m[0] == '.' && m[1] == '\n')
break;
}
if (len == 0)
printf("YES\n");
else
{
printf("NO\n");
if (a[len] == '*' || a[len] == '/')
printf("%c%c-?\n", a[len - 1], a[len]);
else if (a[len] == '[' || a[len] == '{' || a[len] == '(')
printf("%c-?\n", a[len]);
else if (a[len] == ']' || a[len] == '}' || a[len] == ')')
printf("?-%c\n", a[len]);
}
return 0;
}
主要的修改如下:
使用 fgets 替换 gets,避免缓冲区溢出的问题。
定义了一个 MAX_SIZE 常量,用于限制输入字符串的最大长度。
在 if 语句中,判断条件时需要使用 == 而不是 =。
在输出 ?-%c 时,需要加上换行符 \n。