容易被忽略的问题,安迪的第一个字典

作者: 新金沙平台  发布:2019-09-27

Description

  折磨我几天的问题今天终于解决了,分享一下近期solr使用的一些经验。

1.字符串数组,字符串指针可以直接输出

Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for him, as the number of words that he knows is, well, not quite enough. Instead of thinking up all the words himself, he has a briliant idea. From his bookshelf he would pick one of his favourite story books, from which he would copy out all the distinct words. By arranging the words in alphabetical order, he is done! Of course, it is a really time-consuming job, and this is where a computer program is helpful.You are asked to write a program that lists all the different words in the input text. In this problem, a word is defined as a consecutive sequence of alphabets, in upper and/or lower case. Words with only one letter are also to be considered. Furthermore, your program must be CaSe InSeNsItIvE. For example, words like "Apple", "apple" or "APPLE" must be considered the same.

本来是用nutch在爬取页面,可是客户需要爬取RSS,而且可以识别那些页面是通过RSS源抓取出来的。nutch虽然自带解析RSS的插件,但是有些RSS解析不了,也不好控制,更重要的抓取后和普通页面就没什么太大的区别了,不能识别不能判断是由哪个rss源抓取出来的。因为上面原因,所以就自己用C#写了一个配合Solr抓取RSS的工程。

char s2[30]="I am a student";cout<<s2<<endl;char *p="I am a student";cout<<p<<endl;cout<<p[2]<<endl;

Input

The input file is a text with no more than 5000 lines. An input line has at most 200 characters. Input is terminated by EOF.

一切实现好后,客户非常满意,我也觉得做的还不错,可是过了一段时间后发现nutch在solrdedup时失败了,导致nutch不能使用。下面就把rss实现的原理,和问题的产生进行介绍,解决solr和nutch这些问题不是因为非常难理解,主要是这类问题在网上很难找到。由于公司没有外网和拷贝权限,所有的一切只能凭我的记忆写出来了。

2.指针变量p分配4个存储单元。

Output

Your output should give a list of different words that appears in the input text, one in a line. The words should all be in lower case, sorted in alphabetical order. You can be sure that he number of distinct words in the text does not exceed 5000.

 RSS Solr的实现是利用webrequest读取到rss源的xml格式的内容,直接里面post方式为solr建立索引。为了达到客户的要求,我在solr的schame里面添加了rss和isrss字段,rss为rss源的url地址,isrss固定为ture。由于nutch没有这2个字段,所以我们查询rss只需 输入 isrss:"true"就可以过滤掉不是rss出来的页面。

用指针变量处理字符串,要比用数组处理字符串方便。
指针变量用于存放变量地址,而地址通常为4字节,所以指针变量的长度均为4个字节。

Sample Input

Adventures in DisneylandTwo blondes were going to Disneyland when they came to a fork in theroad. The sign read: "Disneyland Left."So they went home.

实现过程中主要要注意下面几点

图片 1图片 2

Sample Output

aadventuresblondescamedisneylandforkgoinghomeinleftreadroadsignsothetheytotwowentwerewhen
1.中文翻译

大体的中文意思就是:输入一个文本,找出所有不同的单词,按字典序列从小到大输出。单词不区分大小写,输入输出和上面一样。

2.分析

这个题比较简单,我学习的是《算法竞赛入门经典》这本书的代码。

1.学会运用set容器;(有个小知识点,set容器,元素只能出现一次,并且插入可以从小到大排序)

2.学习字符函数库中常用的函数

3.学会stringstream(可参考这篇博文:

4.最后运行记得是 在空行 ctrl z 回车。(至于为什么,参考博文:

3.说明

set是一个集合 和康托前辈的一样 集合中的元素不重复 且集合中的元素是有序的 TY菌介绍说其内部实质是一个平衡树

set不是数组 只能通过迭代器把里面的元素倒出来 迭代器相当于是指针 扫描的是地址 因此输出的时候需要用*variation

4.声明

需要用到头文件set

set<string> dict; 建立一个集合 其名为dict 基类型是string

5.常用函数

dict.begin() dict.end()返回集合最初和最后的元素的地址

这是写这个例题用到的

6.代码
 1 #include<iostream>   2 #include<string>   3 #include<set>   4 #include<sstream>   5 using namespace std;   6    7 set<string> dict;//set up a set called dict-short for dictionary,and it's based on string type;   8    9 int main(){  10     string s,buf;  11     while (cin>>s){  12         for (int i=0;i<s.length();i  )  13           if (isalpha s[i]=tolower;//if it's an letter,turn it lowercase.Others turn space and use stringstream to leave it out=ignore it  14           else s[i]=' ';  15         stringstream ss;  16         while (ss>>buf) dict.insert;//insert it into the set which is already in order,TYkon said it's a balanced tree inside  17     }  18     for (set<string>::iterator it=dict.begin();it!=dict.end//iterator just like a point,scan it from beginning to end and output  19       cout<<*it<<endl;//NOTICE output by point  20     return 0;  21 }

还是英文注释不过看懂应该问题不大

isalpha()判断是否是字母 如果是就用头tolower()转换成小写 否则就转为空格 这样是为了字符串流重读入的时候能够把空格去掉

特别强调一下本例中出现的迭代器

1 for (set<string>::iterator it=dict.begin();it!=dict.end//iterator just like a point,scan it from beginning to end and output  2       cout<<*it<<endl;//NOTICE output by point

迭代器iterator相当于是个类型 it是一个变量 基类型是iterator 它从开始扫到结尾的前一个【据TY菌解释 像数组一样 最后一位是没有值的 数组是一个结束标志 不知集合最后是什么】输出的时候 由于it扫描的是地址 要输出*it

这个好像用到了stl set的语法....

显然对于set我还知之甚少 还需要在今后的学习中不断掌握

今天晚上此时已是0:15,写完博客,明天上课.....


本文部分引用

1.rss源并不是后缀为xml的文件,有些就是普通页面response出来的,而且有些是需要登录权限的

#include<stdio.h>void main(){    int c=sizeof(char);//1    int i=sizeof(int);//4    int l=sizeof(long);//4    int d=sizeof(double);//8    int p=sizeof(int *);//4    int q=sizeof(char *);//4    printf("%dt%dn",c,i);    printf("%dt%dn",l,d);    printf("%dt%dn",p,q);}

2.rss目前主要有2种格式,普遍的xml结构为rss/channel/item ,另外一种就是我们博客园rss的结构feed/entry。

View Code

里面的标签是固定的,可以通过不同的标签找到solr里面filed需要的值

3.static关键字定义静态变量时,相当于只执行第一次。下面程序结果为6

3.id,digest,tstamp三个栏位是必须要的。

图片 3图片 4

上面提到nutch 运行到solrdedup时就报错,开始我以为是solr里面新加的2个字段,尝试为nutch也新增2个字段,而且还利用nutch的静态栏位插件和额外栏位插件,但是没有用,最后我发现把solr的数据清除后居然nutch可以正常运行,我在google里面也查了很多,但是基本没什么帮助,还以为是solr cache的原因。今天刚好有点空,所以我找到了nutch的报错文件solrdeleteduplicates.java,研究发现里面nutch去除重复是从solr直接取了id,digest,tstamp字段,没有判断是否为空就直接使用了。

#include<stdio.h>#include<stdlib.h>c(int i){    static int c=0;    c =i;    printf("%dn",c);    return c;}int main(){int j,i;for(i=0;i<=3;i  ){    j=c;}printf("%dn",j);}

本文由新金沙平台发布于新金沙平台,转载请注明出处:容易被忽略的问题,安迪的第一个字典

关键词: 新金沙平台