??xml version="1.0" encoding="utf-8" standalone="yes"?> 正常使用情况下,没有M问题Q环境是Q?/p>
OS: Ubuntu 10.04 Version: Aodbe Reader 9.5.1 但是打开部分文档Q可能是LateX生成的文档时Q出现问题,׃字体不完全导致?/p>
解决办法Q?/p>
下蝲Q?/p>
然后以管理员w䆾q行Q即可?/p>
此安装包解决了字体的问题Q不仅仅针对?Adobe Reader软gQ用默认的阅读器会发现也能够正常浏览文了Q所以对于字体是普遍生效的?/strong>
目前Q本人在帝求学Q专研大数据和深度学习,Ud互联|及应用Q考虑到研I和个h提升的需要开通了Google website和google blogger用于写作Q以历练p。本Z直崇互联网分n和开源Y件精,亦准备后l在自己的能力范围内Z联网普及和开源Y件的开发和推广做A献,考虑到目前此博客已不再适合自己的写作,故{战其他地址Q望各位看客见谅?br />
另外Q希望看客不要再留下Mnd的评论,于h于己都无益处Q本人写作纵使漏z百Z非强q你领会接受Q只作ؓ个h存使用而已Q一个对技术有热爱的h应该是有探究_来判断正误,而非拿来M或者动辄破口大骂,我也没有旉L理这些难{大雅之堂的评论Q望理解见谅?br />
Dec 14th, 12:54 am @MA
]]> http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/9.1/misc/FontPack910_chs_i486-linux.tar.bz2
]]>
虽然了解不多Q不q感觉处理文件和字符串非常强大,因此有一个需求,希望网上copy的连l的单词l成的字W串按照I格分割开来,q新写入到文g中,q样文g的每一行都是一个单词,而且后面q可以加入注释。由于手动换行非帔R烦,所以希望用python来实现这个简单的功能?br />具体实现代码如下Q确实非常简单:
#Description: read file and arrange them in lines by words
file = open("test", "r")
str = file.read()
tup = str.split(" ")
writeStr = ""
for i in tup:
writeStr += i + "\n"
outfile = open("out", "w")
outfile.write(writeStr)
print tup
实非常单,最后也实现了想要的效果。后l需要想办法加入查询的过哦你你,卛_每一行的q个单词Q想办法查询它的意思,然后一起写q去Q这Pcopy的这个连串的字符串就能够得到每一个单词的释义了?br />
另外QVIM有一个很好的功能Q用JQ在命o模式下可以连接成一行,因此文g开始的时候是Q?br />
impart
apotheosis
pulp
nobility
reimburse
flora
deliberately
twine
heresy
effluent
condone
flout
sermon
concur
elation
slab
aerate
backdrop
emblem
chicanery
disqualify
hypersensitive
fitful
coil
irresolute
contemptible
hinge
tectonics
bicker
tilted
collaborate
salutary
annul
vex
maxim
scanty
reptile
transfix
impending
intersect
drill
inviting
retreat
serrated
l过VIM处理之后变成了一行:
impart apotheosis pulp nobility reimburse flora deliberately twine heresy effluent condone flout sermon concur elation slab aerate backdrop emblem chicanery disqualify hypersensitive fitful coil irresolute contemptible hinge tectonics bicker tilted collaborate salutary annul vex maxim scanty reptile transfix impending intersect drill inviting retreat serrated
然后在把q个文g作ؓ输入Q经q程序重新写回去Q就成ؓ了第一个上面所C的单词Q现在在思考哪些地方可以抓取这些单词呢Q貌似Google译已经没有API支持了,不知道哪位大侠可以给于指|
]]>
解决办法Q?br />1. 用VIM打开Q设|编码ؓunix
Qset fileformat=unix
然后Q保存,l尾unix格式?br />
2. 使用VIM的替换功能,替换行末的\rW号卛_
:%s/^M//g
3. 使用sed来进行批量处?br /> sed ’s/^M//’ filename > tmp_filename
4. 扚w处理Q推荐用)
sudo apt-get install dos2unix
find . * | xargs dos2unix Q对当前目录下面的所有文件执行{换格式的命oQ?br />
一个需要注意的点:dos2unix需要root权限Q我开始的时候没有用sudoq行Q提C{换失败,后来利用sudo执行卛_?br />问题的根源来源于Q?br />在Windows下面拉取Git上面的代码,l果l版本库所有的文g都加上了行末W号Q而在Linux下面再次~辑该文件就发现所有的问题都出现问题,提交的时候又不能
把所有的文g都提交成Windows的编码,因ؓq部分修Ҏ没有意义的,所以需要批量{换?br />
]]>
lD
本节评主要内容是关于泛型数据的拯Q虽然是使用C语言实现Qƈ且没有用到C++中的模板q种泛型~程技术,但是效果却非常好。本节内容紧接上节所的字节位拷贝的知识Q充分利用了字节拯技术?/p>
W记
׃内容和例子不断深入,实际核心内容则比较集中,因此q里只进行ȝ讨论?/p>
引例
本节所有的例子都是针对于数据交换来q行的,从最单的例子开始,不断深入?开始是关于一个最单的整数数据的交换实例:
void swap(int a, int b){
int tmp = a;
a = b;
b = tmp;
}
此例子非常简单,只需要构造一个简单的中间临时变量tmp用来存放a的|q且交换赋值相关的数据Q就可以辑ֈ交换的目的?/p>
但是Q此实例有一个缺P是g递,而不是引用传递,q样Q传递的D然改变,但是只想原始变量的单元却没有改变Q具体来说就是:
a = 23;
b = 34
swap(a, b);
执行上面一D语句会发现Q其实aQb的值ƈ没有交换Q原因和C/C++的参数的g递以及指针传递有关系。函数调用的时候,只会拯aQb的|因此调用swap的时候,交换的是形参Q实际参数的值ƈ没有改变?/p>
要实现真正参C递的效果Q需要用指针的Ş式来实现Q?/p>
void swap(int *vp1, int *vp2) {
int a = *vp1;
*vp1 = *vp2;
*vp2 = *vp1;
}
再次调用swap(&a, &b)的时候,׃修改掉原来的|因ؓq里传递过ȝ是指针Q所以,?span style=" font-style:italic;">vp1Q?/span>vp2的操?是Ҏ向单元aQb的操作,所以能够修改对应的倹{?/p>
泛型交换与拷?/span>
上面的例子,只是ҎU特定的cdq行交换Q比如intcdQ如果想对doublecd{进行交换,只需要修改其cd为double卛_Q其他类型类伹{?但是考虑到需要对多种不同cdq行交换Q是否存在一U通用的方法呢Q?在C++中,可以用模板template技术,然而这里,回想起上节课中讲到的字节操作Q能否利用字节的拯来实现呢Q答案是肯定的?/p>
void swap(void *vp1, void *vp2, int size){
char buffer[size];
memcpy(buffer, vp1, size);
memcpy(vp1, vp2, size);
memcpy(vp2, buffer, size);
}
调用的时候,字号需要给定某个类型,卛_实现。比如,通过Q?/p>
double a = 23.0, b = 34.0;
swap(&a, &b, sizeof(double));
当然Q对于结构体也可以通过q种形式来进行拷贝?/p>
关于上面例子的几点说明:
存在的问?/span>
׃~译器会很容易的放过void*带来的错误,所以如果两个类型不同的数据调用此函敎ͼ׃出现问题Q?/p>
double a = 23.0;
int b = 345;
swap(&a, &b, sizeof(double));
q里Qdouble和intcd占据的数据空间的大小是不同的Q因此,如果单纯的直接调用这个函敎ͼ׃出错Q简单的l果是Q截断拷贝或者多拯数据?比如Qintcd拯到double数据I间的时候,只有前面2个字节拷贝了Q后面的原来double数据的两个字节仍然保留了Q或者说double拯到int的时候,可能会多拯两个字节到int后面的数据,造成出错。具体的方式Q与后面一个参数sizeof(double)或者sizeof(int)有关pR?/p>
初学者容易犯的错?/span>
char * husband = strdup("Fred"); char * wife = strdup("Wilma");
如果想交换两人所指向的空间内容,正确的做法是Q?/p>
swap(&hustband, &wife, sizeof(char *))
也就是说Q这里要交换的是指针的地址Q交换之后,husband的内容发生了变化Q内容变成了原来wife的内容,׃本n是地址Q所以内容变了,实际上所只想的地址也变了,现在husband指向原来wife所指向的地址Q而wife指向原来husband指向的地址?/p>
一个错误的例子是Qswap(husband, wife, &sizeof(char *))Q这P交换的实际上是他们锁指向的内容,卛_放Fred和Wilama的单元中的内容会交换Q而且Q由于char *是四个字节,因此交换的就只有四个字节的内宏V?Z会如此呢Q因Z面的例子Q比如要交换aQb单元的内容,传入的就是aQb的地址&a, &bQ同Pq里我直接传入指针,当然交换的是他们指向的单元的内容Q即两个字符丌Ӏ?所以要交换两个指针的内容,p交换他们的地址Q即指针的地址Q指针的指针?/p>
另外一个例?/span>
思考一个下面线性搜索的例子Q?/p>
int * lsearch(int key ,int* array, int size){
for (int i = 0; i < size; i++)
{
if(array[i] == key)
return i;
}
}
上面的这D代码,直接q回的就是找到烦引的那个下标?/p>
利用位比较的方式来实?/span>
同样Qؓ了应用上面我们学到的知识Q这里想要泛型比较,搜烦Q如何实玎ͼ 例如Q对于这里的intQ能否用一个structQ一个double或者其他类型?{案仍然是肯定的Q只不过Q我们需要对其中~译器的工作Q比较的大小q行控制而已?/p>
int *lsearch(void *key, void *base, int size, int elementSize){
for (int i = 0; i < size; i++) {
void * elemeAddr = (char *)base + i * elementSize;
if (memcmp(key, elemeAddr, elementSize) == 0)
return elemeAddr;
}
}
q里的几个说明点是Q首先,传入参数的size是要比较的数组的大,cd我们不知道,qvoid *cdQ然后要传入每一个类型的大小QelementSizeQ这个标C每一个数l成员的大小Q正因ؓ有这个我们才可以_և的定位到具体的单元,利用for循环来比较每一个单元和key的关pR而这里比较用的memcmp来进行,比较的字节数是elementSizeQ传入两个指针即可,而比较的指针是数组的每一个单元的地址Q即elemeAddr而已?br />
---Written by markdown and HTML file is generated by markdown.