1029 旧键盘
为什么不对啊
```c
#include
int main()
{
char a[81],s[81],c[81],b[81];
int i=0,j,t=0,f;
gets(a);
gets(s);
for(i=0;a[i]!='\0';i++)
{
f=1;
for(j=0;s[j]!='\0';j++)
{
if(a[i]==s[j])
{
f=0; break;
}
}
if(f==1)
c[t++]=a[i];
}
int x=1;
b[0]=c[0];
for(i=1;c[i]!='\0';i++)
{
f=1;
for(j=0;jif(c[i]==b[j] || c[i]-32==b[j])
f=0;
}
if(f==0)
continue;
b[x++]=c[i];
}
b[x]='\0';
for(i=0;b[i]!='\0';i++)
{
if(b[i]>='A' && b[i]<='Z' || b[i]<='9' && b[i]>='0')
printf("%c",b[i]);
else
printf("%c",b[i]-32);
}
printf("\n");
return 0;
}
```
gets 函数已经被标记为不安全的函数,可以替换为更安全的 fgets 函数。
代码中没有处理多个空格字符的情况。当输入的字符串中包含多个连续的空格字符时,输出结果中可能存在多余的空格字符。
在比较字符是否相等时,应该考虑大小写敏感性。题目要求忽略大小写,但是代码中只考虑了字符 ASCII 码值相等的情况,没有考虑大小写字母的关系。
在输出结果时,应该按照题目要求将字母转换为大写形式。
建议对代码进行以下修改:
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 包含 toupper 函数
int main() {
char a[81], s[81], c[81], b[81];
int i = 0, j, t = 0, f;
fgets(a, 81, stdin); // 使用 fgets 获取输入,限制输入长度为 80 个字符(最后一个字符为换行符)
fgets(s, 81, stdin);
for (i = 0; a[i] != '\n'; i++) { // 遍历字符串直到遇到换行符
f = 1;
for (j = 0; s[j] != '\n'; j++) { // 遍历字符串直到遇到换行符
if (toupper(a[i]) == toupper(s[j])) { // 将字符转换为大写形式进行比较
f = 0;
break;
}
}
if (f == 1 && !isspace(a[i])) // 当 a[i] 不是空格时才将其存入 c 数组
c[t++] = a[i];
}
int x = 1;
b[0] = c[0];
for (i = 1; c[i] != '\0'; i++) {
f = 1;
for (j = 0; j < i; j++) {
if (toupper(c[i]) == toupper(b[j])) { // 将字符转换为大写形式进行比较
f = 0;
break;
}
}
if (f == 0)
continue;
b[x++] = c[i];
}
b[x] = '\0';
for (i = 0; b[i] != '\0'; i++) {
if (isalpha(b[i])) // 判断是否为字母
printf("%c", toupper(b[i])); // 转换为大写字母输出
else
printf("%c", b[i]);
}
printf("\n");
return 0;
}
for(i=1;c[i]!='\0';i++)
这里有问题,c数组你并没有初始化为0啊
定义c数组时,直接初始化为0,如 char c[81] = {0};
void playerMove(char ChessBoard[MAX_ROW][MAX_COL]){//玩家落子
while (1){
printf("请玩家输入坐标(row,col):");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
if (row<0 || row>=MAX_ROW || col<0 || col>=MAX_COL){
printf("您的输入有误,请重新输入!\n");
continue;
}
if (ChessBoard[row][col] != ' '){
printf("此处已经落子!\n");
continue;
}
ChessBoard[row][col] = 'x';
break;
}
}
玩家采用输入行列的方式坐标的方式来落子,同时我们需要排除玩家出入的坐标是否正确的问题,如果玩家输入的坐标超出了范围,则提示玩家输入错误,重新输入,如果玩家输入的坐标的格子已经有一个元素了,则提醒玩家此处已经落子。当玩家正确落子时,我们规定落子的元素为‘X’。