SDUST作业10 Problem J: 提取缩略词
Description
在英文文献中,尤其是专业文献中,经常有很多的缩略词,如CPU代表Central Processing Unit等。为了方便学习,Qili决定从一批英文论文中提取出所有的缩略词以及它们的全称。
经过初步判断,这些文章的缩略词都是以全部大写字母的形式出现,而且每个缩略词之后会有一个空格,之后是它的全称。全称使用“()”括起来,左括号跟它后面的单词之间没有空格,右括号跟它前面的单词之间没有空格,全称的每个单词的首字母与缩略词的顺序是对应的。全称的单词之间可能有连字符“-”连接。
你来帮Qili编写这个程序,将所有的缩略词和全称提取出来。
Input
一篇英文文章,每个缩略词第一次出现时,其后都跟有它的英文全称;同样的缩略词再出现时,将不再出现全称。每个缩略词和全称都不会太长。缩略词总数小于100。
Output
如果有缩略词,第一行输出“Abbreviation ==> Full Name”。之后每个缩略词和它的全称占一行,包括缩略词的序号(从1开始)、缩略词、分隔符(==>)和全称。所有输出以分隔符(==>)分为两部分,右侧的全称左对齐,左侧的缩略词右对齐,但序号和第一行的“Abbreviation”是左对齐的。每个缩略词只输出一遍。
如果没有缩略词,则输出:There is no abbreviations in this text.
Sample Input
Sample Output
HINT
以下贴一下我的代码:
#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: 提取缩略词的更多相关文章
- SDUST 作业10 Problem I 液晶显示
Description 你的朋友刚买了一台新电脑,他以前用过的最强大的计算工具是一台袖珍计算器.现在,看着自己的新电脑,他有点失望,因为他更喜欢计算器上的LC显示器.所以,你决定写一个LC显示风格的程 ...
- SDUST 作业10 Problem D 魔方阵
Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2 魔方阵的规律如下: ...
- 在IT产品白皮书中遇到的缩略词
在IT产品白皮书中遇到的缩略词 更新中...
- ldap理论属于概念缩略词
Standalone LDAP Daemon, slapd(standalone lightweight access protocol) ldap 389 default listener port ...
- IT相关术语、缩略词
CLI Command Line Interface 命令行界面 GUI Graphical User Interface 图形用户界面 IP Internet Protocol 因特网协议 JDK ...
- 山科SDUST OJ Problem J :连分数
Problem J: 连分数 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 2723 Solved: 801[Submit][Status][Web B ...
- 实验12:Problem J: 动物爱好者
#define null ""是用来将字符串清空的 #define none -1是用来当不存在这种动物时,返回-1. 其实这种做法有点多余,不过好理解一些. Home Web B ...
- 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, ...
- 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 ...
随机推荐
- 认识与学习BASH
应用程序在最外面,就如同鸡蛋的外壳一样,因此被称呼为shell(壳程序).其实壳程序的功能只是提供操作系统的一个接口. 应用程序 ↓ 操作系统(系统呼叫+核心) ↓ 硬件 linux预设的shell就 ...
- div的contenteditable和placeholder蹦出的火花
今天在做手机端发布描述内容时,需要实现换行,还需要有plachholder. 在文本框中换行自然想到了textarea. 问题似乎已经解决了,但是当内容发布后,在html中显示换行都丢失了. 这个时候 ...
- jQuery 的append在ie下的兼容性
$("body").append("<div id='ajaxLoadDiv'><span><img src='images/ajaxLoa ...
- [datatable]C# DataTable 如何排序
DataTable dt = new DataTable(); dt.Columns.Add("ProductID", typeof(string)); dt.Columns.Ad ...
- wap资费页面
移动网关 CMWAP 返回vnd.wap.wml 用CMWAP接入点发一个http的请求时,移动的10.0.0.172这个代理网关会回一个确认页面,中国特色.处理的办法是检测到Content-type ...
- onmousemove和onmouseout事件的调用,和js使用双引号、单引号的时候应该注意的问题
使用js的时候,统一使用双引号,然后通过反斜杠进行转义 ①如果同时使用单引号.和双引号的情况下容易出现问题,导致标签中表示的事件不能调用, ②导致由于标签没有封口而出现样式布局错误 <!DOCT ...
- Redis多机功能介绍
Redis多机功能目的:以单台Redis服务器过渡到多台Redis服务器 Redis单机在生产环境中存在的问题 1.内存容量不足 Redis使用内存来存书数据库中的数据,但是对于一台机器来说,硬件的内 ...
- junit模板方法模式应用
模板方法模式 定义: 定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义该算法的某些特定步骤.这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以 ...
- 在linux中安装和卸载mysql
[安装] 已经获取到linux版本的mysql安装包,包括mysql的server(服务端)和client(客户端)的安装包,假设安装包为: MySQL-server-5.0.22-0.i386.rp ...
- 【鸡渣饲料系列】《Introdution to 3D Game Programming With DirectX11》 代码转移至vs2015
<Introdution to 3D Game Programming With DirectX11>我是从这本书学习的directx,被称为“龙书”dx11版,由于是通过这本书学习的所以 ...