|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这是我们学校OJ的一道题目:
给定n行字符串,请统计每行字符串中元音aeiou出现的次数,并且输出各元音的出现次数的统计表。
数据范围:
0<n<1000,0<字符串长度<100000
输入
第一行为一个整数n,表示要统计的字符串行数。从第二行开始到文件结尾是n行字符串。
输出
n个元音出现次数统计表,每个统计表之间用空行隔开,最后一张统计表的结束没有空行
一开始提交的代码是这样的:
- #include <stdio.h>
- int main(void)
- {
- int n, a, e, i, o, u;
- scanf("%d", &n);
- getchar();
- char c;
- while (n--)
- {
- a = e = i = o = u = 0;
- do
- {
- c = getchar();
- if (c == 'a' || c == 'A')
- a++;
- else if (c == 'e' || c == 'E')
- e++;
- else if (c == 'i' || c == 'I')
- i++;
- else if (c == 'o' || c == 'O')
- o++;
- else if (c == 'u' || c == 'U')
- u++;
- } while (c != '\n');
- if (n)
- printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n\n", a, e, i, o, u);
- else
- printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d", a, e, i, o, u);
- }
- return 0;
- }
复制代码
然后OJ显示10个样例里有8个错误
而我们学校的OJ看不到正确输出与我的输出的对比,所以没法直接看错在哪
然后我把 while (c != '\n'); 改成 while (c != '\n' && c != -1); 之后,OJ就通过了
这是为什么?
下面是通过的代码:
- #include <stdio.h>
- int main(void)
- {
- int n, a, e, i, o, u;
- scanf("%d", &n);
- getchar();
- char c;
- while (n--)
- {
- a = e = i = o = u = 0;
- do
- {
- c = getchar();
- if (c == 'a' || c == 'A')
- a++;
- else if (c == 'e' || c == 'E')
- e++;
- else if (c == 'i' || c == 'I')
- i++;
- else if (c == 'o' || c == 'O')
- o++;
- else if (c == 'u' || c == 'U')
- u++;
- } while (c != '\n' && c != -1);
- if (n)
- printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n\n", a, e, i, o, u);
- else
- printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d", a, e, i, o, u);
- }
- return 0;
- }
复制代码
题目中还有一个条件是文件结尾(EOF)。文件结尾没有存在换行符,而EOF的值为-1
|
|