Description

在英文文献中,尤其是专业文献中,经常有很多的缩略词,如CPU代表Central Processing Unit等。为了方便学习,Qili决定从一批英文论文中提取出所有的缩略词以及它们的全称。

经过初步判断,这些文章的缩略词都是以全部大写字母的形式出现,而且每个缩略词之后会有一个空格,之后是它的全称。全称使用“()”括起来,左括号跟它后面的单词之间没有空格,右括号跟它前面的单词之间没有空格,全称的每个单词的首字母与缩略词的顺序是对应的。全称的单词之间可能有连字符“-”连接。

你来帮Qili编写这个程序,将所有的缩略词和全称提取出来。

Input

一篇英文文章,每个缩略词第一次出现时,其后都跟有它的英文全称;同样的缩略词再出现时,将不再出现全称。每个缩略词和全称都不会太长。缩略词总数小于100。

Output

如果有缩略词,第一行输出“Abbreviation ==> Full Name”。之后每个缩略词和它的全称占一行,包括缩略词的序号(从1开始)、缩略词、分隔符(==>)和全称。所有输出以分隔符(==>)分为两部分,右侧的全称左对齐,左侧的缩略词右对齐,但序号和第一行的“Abbreviation”是左对齐的。每个缩略词只输出一遍。

如果没有缩略词,则输出:There is no abbreviations in this text.

Sample Input

COMputers such as the ENIAC (Electronic Numerical Integrator And Computer) had to be physically rewired in order to perform different tasks, which caused these machines to be called "fixed-program computers."

Sample Output

Abbreviation ==> Full Name 1: ENIAC ==> Electronic Numerical Integrator And Computer

HINT

注意:大写的不一定都是缩写,有括号的不一定都是全称。可以做一个函数忽略字母的大小写判断字符相同。
提取缩略词时应注意:英文全称的单词之间不一定只用空格分开,有些英文单词是带连字符的,但是其首字母也会被提取出缩略词。
 
这道题目需要考虑的问题比较多,但选择思路不同,可能问题的复杂程度也会不同。
另外,在读题上,我也存在的很大失误,由于读题问题,导致选择的思路不合适,以至于最后改代码的越改越乱。
我总结的需要注意的问题有一下几点:
1.一定在做题之前认真分析题目,逐字逐句的读,想清楚再动手写代码,这样可以起到事半功倍的效果
2.边写边测试,在继续写程序之前务必确保之前的代码是完全正确的。
3.注意函数的使用,恰当的使用函数可以是程序结构更加清晰
4.综合考虑各种极端情况,比如最开头,最结尾,无解,一解,单字母等等情况,使用指针时尤其注意指针越界访问

以下贴一下我的代码:

 #include <stdio.h>
#include <ctype.h>
#include <string.h>
char str[];
void printste(char *s,char *e){
while(s<=e)putchar(*s++);
}
int is_upper(char *s,char *e){
while(s<=e)if(!isupper(*s++))return ;
return ;
}
int match_word(char *s,char *e,char *as,char *ae){
if(s>e||as>ae||*(e)==' ')return ;
while(s<=e&&as<=ae){
if(*as++!=toupper(*s++))return ;
while(*s!=' '&&*s!='-')s++;
s++;
}
if(s<=e)return ;
return ;
}
void search(char * p){
int cnt=;
char * p0=p,*p1;
while(p0!=NULL){
int ok=;
char *p3;//p0代表(,p1代表),p3代表缩略词首字母
if((p0=strchr(p0,'('))==NULL)break;
if((p1=strchr(p0+,')'))==NULL)break;
p3=p0-;
if(p3-p>=&&*(p3+)==' ')while(p3-p>=&&isupper(*(p3)))p3--;//防止下标越界
else ok=;
if(islower(*(p3))) ok=;
if(ok&&match_word(p0+,p1-,++p3,p0-)){
if(!cnt)printf("Abbreviation ==> Full Name\n");
printf("%d:",++cnt);
*(p0-)='\0';
if((cnt)/==)printf("%10s",p3);
else if((cnt)/==)printf("%9s",p3);
*(p0-)=' ';
printf(" ==> ");
printste(p0+,p1-);
printf("\n");
}
p0=p1;
}
if(cnt==) printf("There is no abbreviations in this text.\n");
}
int main(){
int ch;
int k=;
while((ch=getchar())!=EOF)
str[k++]=(ch=='\n')?' ':ch;
str[k]=' ';str[k++]=' ';str[k++]=;//防止字符串末尾下标越界
search(str);
return ;
}

SDUST作业10 Problem J: 提取缩略词的更多相关文章

  1. SDUST 作业10 Problem I 液晶显示

    Description 你的朋友刚买了一台新电脑,他以前用过的最强大的计算工具是一台袖珍计算器.现在,看着自己的新电脑,他有点失望,因为他更喜欢计算器上的LC显示器.所以,你决定写一个LC显示风格的程 ...

  2. SDUST 作业10 Problem D 魔方阵

    Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2     魔方阵的规律如下: ...

  3. 在IT产品白皮书中遇到的缩略词

    在IT产品白皮书中遇到的缩略词 更新中...

  4. ldap理论属于概念缩略词

    Standalone LDAP Daemon, slapd(standalone lightweight access protocol) ldap 389 default listener port ...

  5. IT相关术语、缩略词

    CLI Command Line Interface 命令行界面 GUI Graphical User Interface 图形用户界面 IP Internet Protocol 因特网协议 JDK ...

  6. 山科SDUST OJ Problem J :连分数

    Problem J: 连分数 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2723  Solved: 801[Submit][Status][Web B ...

  7. 实验12:Problem J: 动物爱好者

    #define null ""是用来将字符串清空的 #define none -1是用来当不存在这种动物时,返回-1. 其实这种做法有点多余,不过好理解一些. Home Web B ...

  8. The Ninth Hunan Collegiate Programming Contest (2013) Problem J

    Problem J Joking with Fermat's Last Theorem Fermat's Last Theorem: no three positive integers a, b, ...

  9. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem J. Joke 水题

    Problem J. Joke 题目连接: http://codeforces.com/gym/100714 Description The problem is to cut the largest ...

随机推荐

  1. 创建一个spring helloworld

    1.下载所需要的jar包 http://projects.spring.io/spring-framework/ 这里使用了maven方式给出jar <dependencies> < ...

  2. [SQL] 如何在SQL Server2005数据库中检查一个表是否存在,如存在就删除表记录,如不存在就建表.

    . 检索 dbo.sysobjects表, select count(*) from dbo.sysobjects where xtype='U' and Name = '你的表名' . 根据返回的结 ...

  3. POJ 1286 【POLYA】

    题意: 给你三种颜色的珠子,每次给你N,问在旋转,翻转之后视作相同的情况下,能组成多少种不同的项链. 思路: 让我们借这道题拯救一下我对POLYA定理的理解... sigma(m^(gcd(i,n)) ...

  4. JavaScriptResult用法

    写MVC项目的时候,一开始就遇到返回脚本无法执行的情况,查阅博客园中老鸟的各种文章,最后没有得出个所以然,没办法,找项目经理实地讨论. public JavaScriptResult Hello() ...

  5. Ubuntu - Grub2.0修改默认启动项

    1. 我的环境: Ubuntu 10.04   2. 关键位置和文件: /boot/grub/grub.cfg 文件: /etc/grub.d/ 目录: /etc/default/grub 文件:   ...

  6. JS浮点数运算BUG破法

    JS里,0.3*3 = 0.8999999999999999 破法1:((0.3*10)*3)/10 破法2:(0.3*3).toFixed(2)//保留两位小数 原因:js浮点数用的是IEEE754 ...

  7. bored

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  8. 【Unity Shaders】学习笔记——SurfaceShader(七)法线贴图

    [Unity Shaders]学习笔记——SurfaceShader(七)法线贴图 转载请注明出处:http://www.cnblogs.com/-867259206/p/5627565.html 写 ...

  9. 【练习】ORACLE统计信息--直方图

    ①创建表tSQL> create table t as select * from dba_objects; Table created. --收集直方图 SQL> exec dbms_s ...

  10. 【转】Java的接口和抽象类的区别

    1.      抽象类和接口的区别 所谓抽象类是用来表征我们在对问题领域进行分析.设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象:所谓接口,相当于电源插座,可插入构件相当于 ...