拼单词
源文件: words(.bas/.c/.cpp/.pas)
输入文件: words.in
输出文件: words.out
最近,小明的英语老师给小明留了一项作业,要求小明写一篇英文作文。小明刚学英语不久,经常在单词的拼写上犯错误,比如苹果apple写成了appel。所以小明写出的英文句子通常让人难以理解。
非常有趣的是,如果小明写下的英文句子中每一个单词的第一个字母和最后一个字母没有拼错,只是其余的若干个字母交换了一下顺序,对于小明的英语老师来说还是可以理解的。如果有一个单词不是按照这样的规则拼错,那么小明的英语老师就不知道小明想要表达的意思了。例如,小明想要写下的句子是"I am a student",然而他实际写下的是"I am a stuednt",对于这样的情况小明的英语老师是能理解的,因为其他单词都没有拼写错误,只是student这个单词中间的字母交换了一下顺序而已;如果小明写下的句子是"I ma a student",那么小明的英语老师就不能理解小明写的是什么了,因为am这个单词的首位字母都拼错了。
现在我们把小明作文中想要写下的句子和实际写下的句子给你,你能用程序判断一下,他的英文老师可以理解小明写的这些句子吗?
输入数据的第一行是一个整数N(1<=N<=10),表明一共有N组数据需要判断。接下来的N组数据每一组数据都包含两个句子,第一行的句子为小明想要写下的句子,第二行的句子为小明实际写下的句子。每个句子占用一行,不包含任何标点符号。每个句子最多包含100个英文单词,每个英文单词都是由大写英文字母('A'--'Z')和小写英文字母('a'--'z')组成,单词之间用空格隔开,每个单词中包含的英文字母不超过20个。
输出数据应包含N行,对于第i(1<=i<=N)组数据,如果小明的英语老师能理解小明写下的英文句子的意思,那么在第i(1<=i<=N)行输出Yes,否则输出No。请同学们注意,Yes和No的首字母大写。
【样例输入】
2
I am a student
a ma a student
I am a student
I am a sdtunet
【样例输出】
No
Yes
【说明】
解题思路
1. 多个test case
2. 单词的首字母和尾字母判断,其前一个或后一个字符是空格
3. 句首和句尾字符的判断,根据下标判断
4. 使用c语言中的gets()函数,会读入末尾的回车符
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char const* argv[])
{
int n, len, flg, i;
char origin[5000], fact[5000];
scanf("%d\n", &n);
while (n--) {
gets(origin);
gets(fact);
len = strlen(fact);
// gets() will get the last return ASCII(13), remove it!!
if (fact[len-1] == 13) {
len--;
}
flg = 1;
for (i = 0; i < len; i++) {
if (origin[i] != fact[i] &&
(i == 0 || i == len-1 ||
((i > 0) && (fact[i-1] == ' ')) ||
((i < len-1) && (fact[i+1] == ' ')))) {
flg = 0;
break;
}
}
if (flg) {
printf("Yes\n");
} else {
printf("No\n");
}
}
return 0;
}