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 ...
随机推荐
- C++学习23 虚函数详解
虚函数对于多态具有决定性的作用,有虚函数才能构成多态.上节的例子中,你可能还未发现虚函数的用途,不妨来看下面的代码. #include <iostream> using namespace ...
- C# 自定义事件(EventArgs)
1,自定义事件: public class TextChangeEventArgs : EventArgs { private string message; public TextC ...
- hbase的rowkey简单设计
问题: 需要查询某一用户某时间做了什么,PlatID和vopenid可以保证一个用户唯一,但同一时间同一用户可能日志有多条. 使用PlatID(int).vopenid(int)和dtTime(dat ...
- JQuery上传插件uploadify优化
旧版的uploadify是基于flash上传的,但是总有那么些问题,让我们用的不是很舒服.今天主要分享下在项目中用uploadify遇到的一些问题,以及优化处理 官方下载 官方文档 官方演示 下面是官 ...
- UIPickView 和 UIDatePicker
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- MFC学习 修改窗口样式
1. 在PreCreateWindow中可用CREATESTRUCT cs, cs.lpszName修改窗口标题, cs.lpszClass = AfxRegisterWndClass 修改图标与样式 ...
- 【转】appium_python_API文档
1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...
- c# 调用 CRFs应用程序
今天想用C#调用crfs,但是老出问题.原因有几点.第一,我对crf不理解,虽然我用cmd跑了一遍,但是根本不理解为什么,而且只是草草看了下参数该输入什么,只是了解了形式,没有了解实质.所以在调用的时 ...
- 【翻译习作】 Windows Workflow Foundation程序开发-第一章02
1.2 Windows Workflow概览 微软的Windows Workflow Foundation(简称WF)是.NET框架3.0版的一部分..NET3.0其它主要部分是Window ...
- emacs org mode 中的标签全参考
把交叉的信息关联起来的最好的方式就是打标签. emacs 的 org 模式对标签的支持非常强大. 每一个标题都可以在最后包含标签列表.标签由字母.数字.'_' 和 '@' 组成.标签的前后必需有一个冒 ...