uva 230 Borrowers(摘)<vector>"结构体“ 膜拜!
I mean your borrowers of books--those mutilators of collections, spoilers of the symmetry of shelves, and creators of odd volumes. --Charles Lamb, Essays of Elia (1823) 'The Two Races of Men'
Like Mr. Lamb, librarians have their problems with borrowers too. People don't put books back where they should. Instead, returned books are kept at the main desk until a librarian is free to replace them in the right places on the shelves. Even for librarians, putting the right book in the right place can be very time-consuming. But since many libraries are now computerized, you can write a program to help.
When a borrower takes out or returns a book, the computer keeps a record of the title. Periodically, the librarians will ask your program for a list of books that have been returned so the books can be returned to their correct places on the shelves. Before they are returned to the shelves, the returned books are sorted by author and then title using the ASCII collating sequence. Your program should output the list of returned books in the same order as they should appear on the shelves. For each book, your program should tell the librarian which book (including those previously shelved) is already on the shelf before which the returned book should go.
Input
Output
Sample Input
"The Canterbury Tales" by Chaucer, G.
"Algorithms" by Sedgewick, R.
"The C Programming Language" by Kernighan, B. and Ritchie, D.
END
BORROW "Algorithms"
BORROW "The C Programming Language"
RETURN "Algorithms"
RETURN "The C Programming Language"
SHELVE
END
Sample Output
Put "The C Programming Language" after "The Canterbury Tales"
Put "Algorithms" after "The C Programming Language"
END 真是一看到各种麻烦的字符串的输入输出就不敢做了,真的对字符串好不熟悉。
这个题感觉数据的处理确实比较麻烦
以下为摘来的代码
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <string>
#include <string.h>
#include <vector>
using namespace std; struct book{
string title, author;
bool borrowed, returned;
book(string a,string b){
title = a;
author = b;
borrowed = returned = false;
}
}; vector<book> allbook;
string command,request,ss; bool cmpa(book a,book b)
{
return (a.author < b.author);
} bool cmpt(book a,book b)
{
return (a.title < b.title);
} void shelve()
{
int j;
for(int i = ; i < allbook.size();i++){
if(allbook[i].returned == true){
for(j = i; j >= ;j--){
if(allbook[j].borrowed == false)break;
}
if(j == -)printf("Put %s first\n", allbook[i].title.c_str()); //之前的所有书都被借走了
else printf("Put %s after %s\n",allbook[i].title.c_str(), allbook[j].title.c_str());
allbook[i].borrowed = allbook[i].returned = false;
}
}
cout << "END\n";
} void borrow()
{
getline(cin, request);
for(int i = ;i < allbook.size(); i++){
if(allbook[i].title == request){
allbook[i].borrowed = true;
return;
}
}
} void back()
{
getline(cin, request);
for(int i = ; i < allbook.size(); i++ ) {
if(allbook[i].title == request){
allbook[i].returned = true;
return;
}
}
} int main()
{
while(getline(cin,ss)&&ss!="END"){
allbook.push_back(book(ss.substr( , ss.find_last_of( "\"" ) + ),
ss.substr(ss.find_last_of( "\"" ) + )));
}
stable_sort(allbook.begin(), allbook.end(), cmpt);
stable_sort(allbook.begin(), allbook.end(), cmpa);
while(cin >> command){
if( command == "BORROW" )
cin.get(), borrow();
else if( command == "RETURN" )
cin.get(), back();
else if( command == "SHELVE" )
cin.get(), shelve();
}
//system("pause");
return ;
}
把C++中的string 转化为C中的%s输出,要用c_str() ,否则输出的是一堆乱码
看完后觉得操作并不是很难,然而思路和对字符串的处理都值得膜拜!
uva 230 Borrowers(摘)<vector>"结构体“ 膜拜!的更多相关文章
- Uva - 230 - Borrowers
AC代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cctype ...
- UVa 230 Borrowers(map和set)
I mean your borrowers of books - those mutilators of collections, spoilers of the symmetry of shelve ...
- UVA 230 Borrowers (STL 行读入的处理 重载小于号)
题意: 输入若干书籍和作者名字,然后先按作者名字升序排列,再按标题升序排列,然后会有3种指令,BORROW,RETURN, SHELVE. BORROW 和 RETURN 都会带有一个书名在后面,如: ...
- Borrowers UVA - 230
I mean your borrowers of books - those mutilators of collections, spoilers of the symmetry of shel ...
- C++重载流运算符,将存储结构体的vector直接写入文件
我们知道,当vector很大的时候,如果使用循环的方式将其中的元素写入文件将非常费时,因此有没有办法将vector一次性写入文件呢? 采用流运算符重载的方法可以做到,不仅基本类型的vector可以一次 ...
- 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...
- 【转】 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在vector中的用法分为sort函数入门用法与自定义comp比较函数比较结构体这两个最基本的功能 ...
- C++中的结构体vector排序
在包含了头文件#include <algorithm>之后,就可以直接利用sort函数对一个vector进行排序了: // sort algorithm example #include ...
- TCP/IP协议头部结构体(网摘小结)(转)
源:TCP/IP协议头部结构体(网摘小结) TCP/IP协议头部结构体(转) 网络协议结构体定义 // i386 is little_endian. #ifndef LITTLE_ENDIAN #de ...
随机推荐
- ZigZag-LeetCode
题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
- 无法捕获的异常:MissingMethodException
今天一个同事发布站点,一直出现一些稀奇古怪的问题,各种各样的异常都有,根据这些异常去排查代码,都完全正常,很让人郁闷,因为代码里可能出异常的地方都记录了程序日志,所以他一直没去排查系统里的“应用程序日 ...
- winform textbox 的自动实现功能
好久没写博客了,主要是太懒了,之前因为做bs的比较多现在想转cs端了,虽然现在做cs也一年了,可接触的东西太过零碎了,以至于感觉这一年好像什么都没有学到.估计是因为学了之后没有记录,不扎实,然后又忘记 ...
- Android 多渠道打包,上百渠道,秒打签名
具体工具参见:https://github.com/hpu-spring87/MultiSignTools
- php base64数据与图片的转换
1.解析base64数据成图片 The problem is that data:image/bmp;base64, is included in the encoded contents. This ...
- coredata中谓词的使用
Cocoa提供了一个类NSPredicate类,该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配.谓词表示计算真值或假值的函数.在cocoa ...
- mysql 导出导入sql
>mysqldump -u用户名 -p密码 -h主机名 数据库名 > 20150116mw_pm_db.sql mysql> source /home/y/my_work/20150 ...
- 解决Sqlite UTF-8中文数据格式在DOS窗口下中文乱码
问题如下图所示: 右键查看DOS属性:点击选项->当前代码页为GBK 只要将当前代码页编码值设置为UTF-8就可以了: ‘退出sqlite:.exit 输入:chcp 65001回车 右键属性: ...
- 2B相对来说,早期它的成长速度不会像2C那么快
叶冠泰:今天我们是在场比较少数的2B的公司,你能不能给创业者一些分享,你觉得2B跟2C的差别是什么,我们要怎样发展? 蒋韬:这可能跟性格有关系,我的性格可能更适合去做2B的业务. 对于做2B业务的创业 ...
- 《Programming WPF》翻译 第7章 1.图形基础
原文:<Programming WPF>翻译 第7章 1.图形基础 WPF使得在你的应用程序中使用图形很容易,以及更容易开发你的显卡的能力.这有很多图形构架的方面来达到这个目标.其中最重要 ...