从杭电OJ1219 到getchar 以及EOF

原创 2016年05月31日 16:38:00

Problem Description
Ignatius is doing his homework now. The teacher gives him some articles and asks him to tell how many times each letter appears.

It's really easy, isn't it? So come on and AC ME.
 

Input
Each article consists of just one line, and all the letters are in lowercase. You just have to count the number of each letter, so do not pay attention to other characters. The length of article is at most 100000. Process to the end of file.

Note: the problem has multi-cases, and you may use "while(gets(buf)){...}" to process to the end of file.
 

Output
For each article, you have to tell how many times each letter appears. The output format is like "X:N". 

Output a blank line after each test case. More details in sample output.
 

Sample Input
hello, this is my first acm contest! work hard for hdu acm.
 

Sample Output
a:1 b:0 c:2 d:0 e:2 f:1 g:0 h:2 i:3 j:0 k:0 l:2 m:2 n:1 o:2 p:0 q:0 r:1 s:4 t:4 u:0 v:0 w:0 x:0 y:1 z:0 a:2 b:0 c:1 d:2 e:0 f:1 g:0 h:2 i:0 j:0 k:1 l:0 m:1 n:0 o:2 p:0 q:0 r:3 s:0 t:0 u:1 v:0 w:1 x:0 y:0 z:0
 

Author
Ignatius.L






此题着重判断回车换行和文件结束末尾,通过查阅资料发现,char 类型的变量c,通过赋值语句c=getchar,是不能够获得有关文件结束符EOF的值的。原因在于:EOF的实际值为-1,而char类型是不能被赋值为负数的。所以更加标准的写法应当是:

int c;

c=getchar();

现在只要判断c是否等于-1,就可以判断是否到了文件的末尾了。

更多有关getchar和EOF的内容,参见http://www.jb51.net/article/36848.htm



AC代码

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
	//freopen("D:\\input.txt","r",stdin);
	//freopen("D:\\output.txt","w",stdout);
	int A[26]={0};
	int c;
	c=getchar();
	while(c!=-1)
	{
		memset(A,0,sizeof(A));
		while((char)c!='\n'&&c!=-1)
		{
			if(c>='a'&&c<='z')
				A[c-'a']++;
			c=getchar();
		}
		for(int i=0;i<26;i++)
		{
			printf("%c:%d\n",'a'+i,A[i]);
			//cout<<'a'+i<<':'<<A[i]<<endl;
		}
		if(c==-1)
			break;
		cout<<endl;
		c=getchar();
	}
}
			


getchar()和scanf("%c",ch)在用EOF判断结束时的区别

1、getchar() #include int main() { int c; while((c = getchar()) != EOF) putchar...
  • hanchengxi
  • hanchengxi
  • 2013年02月19日 16:49
  • 4500

getchar输入EOF以及\n问题

一、getchar的两点总结: 1.  getchar是以行为单位进行存取的。     当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组...
  • dandanteng
  • dandanteng
  • 2012年05月14日 20:01
  • 2508

while((ch=getchar())!=EOF && ch != '\n')

之前一直对下面这条经典语句理解不够透彻,现分析一下。 while((ch=getchar())!=EOF && ch != '\n') 首先这是一个while循环,入口判断语句稍复杂一些,包括(c...
  • sony_zhang
  • sony_zhang
  • 2011年12月29日 11:27
  • 3886

关于((ch = getchar()) != EOF),ch声明为整型的问题

在使用C语言的输入功能时,经常会看到以下的一个常用代码段int ch; while ((ch = getchar()) != EOF && ch != '\n') ;此处为什么不声明c...
  • talent_CYJ
  • talent_CYJ
  • 2015年10月04日 18:22
  • 793

谈一谈getchar()、EOF和Ctrl+D

getchar()   getchar从stdio流中读字符,getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回...
  • lyh__521
  • lyh__521
  • 2015年07月10日 16:31
  • 1835

while((ch=getchar())!=EOF&&ch != '\n');消除非法输入

第一个程序接收用户输入的两个整数并打印#include int main() { int a, b; printf("请输入两个正整数:\n"); scanf("%d", &...
  • Kwansy
  • Kwansy
  • 2017年11月11日 19:59
  • 173

关于getchar()!=EOF问题

getchar()!=EOF不是输出结果为1么让其循环加1输出可是不能呀,求大侠解惑 #include main() {         long nc;         nc=0;   ...
  • u012187684
  • u012187684
  • 2014年05月09日 09:55
  • 512

getchar, EOF 以及转义字符

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • aprilvkuo
  • aprilvkuo
  • 2015年02月11日 20:53
  • 92

read和write系统调用以及getchar的实现

输入和输出是由read和write两个系统调用实现的。在C语言程序中,可以通过函数read和write访问这两个系统调用。   这两个函数原型为:int n_read = read(int fd,...
  • ww1473345713
  • ww1473345713
  • 2016年06月15日 11:34
  • 438

getchar返回值类型、EOF、if语句

C语言中getchar()的返回值类型为什么是int? 正常情况,getchar返回单个字符。但如果getchar()碰到文件结束标志或发生读错误,他必须返回一个EOF。为了区别于正常的字符,只好将E...
  • bigcupwater
  • bigcupwater
  • 2017年01月04日 23:56
  • 230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从杭电OJ1219 到getchar 以及EOF
举报原因:
原因补充:

(最多只允许输入30个字)