问题链接:CCF NOI1060 雷同检测。
时间限制: 1000 ms 空间限制: 262144 KB
题目描述
考试的时候老师最讨厌有人抄袭了。自从有了电子评卷,老师要查找雷同卷,就容易多了,只要将两个人的答案输入计算机,进行逐个字符的比对,把相同的位置都找出来,就一目了然了。
输入
2行,每行包含一串字符(长度不超过200)
输出
1行,包含若干个以空格分隔的数字,表示出现相同字符的位置。
样例输入
I am a girl.I was born in 2002.
I am a giel.I was birn in 2012.
样例输出
1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 30 31
数据范围限制
问题分析
这是一个简单的字符串输入比较问题。
程序说明
因为函数gets()已经不被推荐使用,所以编写了自己的函数mygets()用于读入一行的字符。
不知道问题出在哪里?只得60分。如果程序中没有条件“if(isalpha(c) || isdigit(c) || c == '.' || c == ',' || c == ' ')”就只能得20分,郁闷啊!
- 必要时,就自己写一个函数。
参考链接:(略)。
得60分的C语言程序:
#include <stdio.h>
#include <ctype.h>
#define N 200
char s[N+1], t[N+1];
int mygets(char s[])
{
int i = 0;
char c;
while((c = getchar()) && c != '\n' && c != EOF)
if(isalpha(c) || isdigit(c) || c == '.' || c == ',' || c == ' ')
s[i++] = c;
s[i] = '\0';
return i > 0 || c != EOF;
}
int main(void)
{
int i;
mygets(s);
mygets(t);
for(i=0; s[i]!='\0' && t[i]!='\0'; i++) {
if(s[i] == t[i])
printf("%d ", i + 1);
}
return 0;
}