UVA 10815 (STL_C题)解题报告

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1756

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

题意:题目给出每行按空格分割的文本数据,要求统计出文章中所有的单词并按字典序输出,不区分大小写。

思路:首先读入数据,拆分成字符串,然后将大写字母转化为小写字母,并对多余的标点符号进行处理。此后将每个单词置入set中,set按字典序排列,输出即可。看上去很简单的一道题,但是有一些不容易注意到的坑。

注意:

1.本文中进行判断的时候,很容易将anscii码与‘A‘与‘z‘比较,但是,基于我们都知道的一个事实是‘A‘和‘a‘相差32,也就是说之间仍然有字符,91-96分别是[,\,],^,\,` 也就是说不能简单按照‘A‘与‘z‘进行判断。当然可以使用isalpha()判断。

2.很自然的会想到标点符号可能会在字符首末,然而存在这样的情况"Andy‘s apple",在这种情况下,输出应为"andy s apple",所以,应该首先对字符串进行处理,即将不是字母的符号替换为‘ ‘(空格),然后再进行分割。

代码:

#include<cstdio>
#include<string>
#include<iostream>
#include<set>
#include<sstream>
#include <cstring>
using namespace std;
string s1;
string cur;
set<string> s;

int main(void){
    while(getline(cin,s1)){
        for(int i=0;i<s1.length();i++){
                if(s1[i]<‘A‘||s1[i]>‘z‘||(s1[i]>‘Z‘&&s1[i]<‘a‘)){
                    s1[i]=‘ ‘;
                }
            }
        stringstream input1(s1);
        while(input1>>cur){

            for(int i=0;i<cur.length();i++){
                if(cur[i]>=‘A‘&&cur[i]<=‘Z‘){
                    cur[i]=cur[i]+32;
                }
            }
            if(cur.length()>0)    s.insert(cur);
        }
    }
    set<string>::iterator it;
        for(it=s.begin();it!=s.end();it++) {
            cout<<*it<<‘\n‘;
        } 

    return 0;

}

原文地址:https://www.cnblogs.com/caomingpei/p/8322204.html

时间: 2024-10-11 23:10:35

UVA 10815 (STL_C题)解题报告的相关文章

08年acm区域赛北京赛区 部分题解题报告

08年区域赛北京赛区 http://poj.org/searchproblem?field=source&key=Beijing+2008 POJ 3921 Destroying the bus stations 题目还是比较难的,当时的榜似乎只有4/25的通过/提交,其实题目数据很水.学长转换模型写了网络流求最小割,可以AC,不过自己造了个数据推翻了正确性.我写了个很挫的bfs套bfs,外层是最小的删除点数,内层是求最短路,数据很水可以AC.但比较蛋疼的在于bfs耗内存,而且队列中的点数是阶乘

圆锥曲线:椭圆小题解题报告

圆锥曲线:椭圆小题解题报告 注意事项: 由于本人水平有限,部分题目解题方法可能非最优解,如有更好方法欢迎在评论区指正. 部分题目讲解可能过于口语化,导致并不符合官方(人教版教材)的要求,请各位在考试中不要学习,使用正确的,符合要求的用语. 本文中可能存在错别字,望发现者在评论区指正. 本篇博客是为记录本人在完成学校作业的过程中遇到的问题,同时给部分同学作为解题参考用. 本篇博客中绘制图像的工具是geogebra. 1~10题: 1 题目: 已知F~1~,F~2~是椭圆\(x^2/4+y^2/3=

2016.8.27一套简单的题解题报告

一套不错的题,需要相关资料的联系我咯 考试分析: 1.  由于题目的名字加上第一道题没读完时我以为是我最不擅长的treeDP(其实不得不说,树和图上的题我真的是不想写,一般都写不对,上课太不认真,这个弱点要加强训练),我直接跳到了最后一道题,明知考3h还用了30min去分析,不过还是感谢,这30min救了我两道题出来: 这套题的确还是比较简单,后两道题只要认真分析数据都不会有问题,也许是因为暑假切了贪心和递推,我对分析数据比较在行,第三题切完之后还有2h,不过没写高精的我有点慌,打算最后留一点时

CQOI2015 后3题解题报告

这个嘛= =,CQOI我只做了后面3题(前面两题老师还没考就还不敢写= =)说一下被虐报告吧= = T3:[CQOI2015]任务查询系统 描述:戳我~~~ 这道题首先很明显是道裸的数据结构题啦.首先他要求在线,那么按顺序建个函数式线段树就行啦 自己太弱调了好久= = CODE: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #inclu

UVa 455 - Periodic Strings 解题报告

1.题目大意 求一个长度不超过80的字符串的最小周期. 2.思路 非常简单,基本就是根据周期的定义做出来的,几乎不需要过脑. 3.应该注意的地方 (1) 最后输出的方式要注意,不然很容易就PE了.不过个人认为,其实这题Sample Output给的不好 (2) 注意输出的要求是最小周期 4.代码 #include"stdio.h" #include"string.h" #define maxn 80 int main() { int T,m,i,j,flag; ch

Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)解题报告

对于这道水题本人觉得应该应用贪心算法来解这道题: 下面就贴出本人的代码吧: 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 5 int a[3],b[3]; 6 7 int main(void) 8 { 9 int n; 10 int need = 0; 11 int sum1 = 0,sum2 = 0; 12 for(int i=1;i<=3;++i){ 13 scanf("%d&q

UVA 11461 Square Numbers解题报告

Discription A square number is an integer number whose square root is also an integer. For example 1, 4, 81 are some square numbers. Given two numbers a and b you will have to find out how many square numbers are there between a and b (inclusive). In

uva 489.Hangman Judge 解题报告

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=430 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 using namespace std; 6 7 con

UVa -1584 Circular Sequence 解题报告

1.题目大意 输入长度为n$(2\le n\le 100)$的环状DNA串,找出该DNA串字典序最小的最小表示. 2.思路 这题特别简单,一一对比不同位置开始的字符串的字典序,更新result. 3.代码 #include"stdio.h" #include"string.h" #define maxn 100 int judge(char* s,int p,int q) //比较p的字典序是否比q小 { int m=strlen(s); for(int i=0;