临近毕业的日子,很放松,放松的有些心慌。在悠哉了近两个月后,决定回到以往陀螺的生活。
奉老妈之命,提早回家,把驾照搞定。于是在提交了预审论文后,就坐上了回家的列车。没想到家里竟比杭州冷很多,对学车本来就没什么热情的我,决定退缩了。
今天终于把网络弄好,寒假学习计划就此开始。
上午:DM + 数据库
下午:Linux
晚上:topcoder
多余的话不多说了,每日一记,执行力!
2012年1月13日星期五
2011年10月22日星期六
找工作应该接近尾声了
从七月份,当NI提前来学校招人时,受到了很大的打击,在第一轮面试的时候,就被刷了。这给我敲响了警钟,对于找工作,我要开始认真对待了。于是,放下手中的paper,捧起算法、C++等相关的书,复习着面试可能遇到的问题。
感觉这个过程,是对研究生阶段所学知识的一个检验,也同时是对自己的一个整体水平的提升。回顾自己整个笔试面试的过程,自己是在一点儿一点儿不断进步的。在九月份的时候,通过一些同学的内部推荐以及自己的投递,先后收到豆瓣、腾讯、百度及阿里的远程面试或电面。豆瓣其实是很可惜的,第一次面试,没有任何经验,开始觉得跟面试官聊的还不错,但是可能是自己的态度也不是很端正,错过了这次机会。不过面试官所问的问题和自己这两年来所研究的东西还是很相关的,而且问的很有深度,感觉我们是能沟通的。平时,像我这样比较偏理论的,很少能遇到如此聊的来的面试官。接下来的电面,感觉都不太好,问的操作系统、计算机组成等基础性的知识,都没有太回答上来,同时也发现了,原来这些方面也需要补一补。
正式的面试,应该是从华为开始的,去面也只是想增长点儿面试经验。酱油打完,接着是淘宝,我所有投的职位都是算法工程师,淘宝也是。一面的面试官在一起聊起来很舒服,对我简历里所列的算法也都比较了解,通过跟她的交谈,自己也找到了一些在理解上面的疏漏。二面有些压力面的意味,面试官感觉比较强势,问了推荐系统中大规模数据处理的情况,基本上把我说的都驳倒了,最终也止步于这一面。接着是搜狗,搜狗很幸运,没有通知笔试,直接面试。可惜没能把握住这次机会,当天不知道为什么,心情低落到极点,在骑车去面试地点的路上,整个乌云密布,开始面试的时候,基本上都不想说话,可想而知,悲剧收场。搜狗之后,很意外的收到盛大的面试通知,原来是内推的同学提前批面试,面试之前,对以往所有的面试小小的总结了一下,调整心情,这个面试感觉还可以,最终顺利的拿到口头offer。国庆节前,能拿到offer是很开心的一件事情。但我知道,国庆后,才是我的主战场。
国庆之后的第一场战役,就是google的笔试,多年的努力,皆起源于它,但深知自己之菜,离它的要求相差之远,所以自己的目标只是通过笔试,进入面试。后来,很可惜,我在笔试就被BS了,回想起来,没有自信,也许也是其中的一个原因。在被google鄙视的同时,还好没有时间去郁闷,因为这时候腾讯、百度、yahoo的笔试面试正如火如荼的进行着。很幸运的通过了三者的笔试。腾讯面试当天同百度、yahoo的笔试时间冲突,弄的hr很不高兴,最后被安排到最后一个,面试结束,走出纳德酒店已是晚上十点,最后也没逃脱被淘汰的结局。不过,也没有觉得太可惜,职位偏工程,和我目前的情况也不太契合。百度、yahoo很顺利的通过了三面,这也是我找工作以来面的最顺利的两家公司了,坦白的说,我自己是没有想到的。可能是所投的职位刚好能发挥我的所长,面试官问的问题都偏理论一些,对实际的项目经验要求不高。加上之前的面试也积攒下一些经验并及时将出现的漏洞和不太扎实的知识点稳固,使得在面对这两家公司的时候,还算是准备的比较充分。百度的offer如期而至,而yahoo却悬而未定,至今仍没有消息,开始对它的希望变成有些失望,最后趋于平淡,顺其自然吧。
今天去面了微策略,很不幸的被bs,不过能通过它的笔试,我也很开心。工作近于尾声,我想如果不出意外,我会去百度。开始最想的是在今年去一家外企,不过现在看来希望不大了。投递的最后一家公司是SAP,不知道会不会给我笔试的资格,如果有就去试一试。最后,总体感觉比较遗憾的是微软,在简历就筛掉了,投的是assistant researcher, 据说基本上不招研究生,只能说我撞到枪口上了。
整个找工作的过程,让我发现了很多以往在学习过程中疏忽但又非常重要的地方,基础知识也又重新复习了一遍。也很感谢一直以来给我鼓励,支持我的朋友们,offer虽不是我最想要的,但也已经很满足了。
感觉这个过程,是对研究生阶段所学知识的一个检验,也同时是对自己的一个整体水平的提升。回顾自己整个笔试面试的过程,自己是在一点儿一点儿不断进步的。在九月份的时候,通过一些同学的内部推荐以及自己的投递,先后收到豆瓣、腾讯、百度及阿里的远程面试或电面。豆瓣其实是很可惜的,第一次面试,没有任何经验,开始觉得跟面试官聊的还不错,但是可能是自己的态度也不是很端正,错过了这次机会。不过面试官所问的问题和自己这两年来所研究的东西还是很相关的,而且问的很有深度,感觉我们是能沟通的。平时,像我这样比较偏理论的,很少能遇到如此聊的来的面试官。接下来的电面,感觉都不太好,问的操作系统、计算机组成等基础性的知识,都没有太回答上来,同时也发现了,原来这些方面也需要补一补。
正式的面试,应该是从华为开始的,去面也只是想增长点儿面试经验。酱油打完,接着是淘宝,我所有投的职位都是算法工程师,淘宝也是。一面的面试官在一起聊起来很舒服,对我简历里所列的算法也都比较了解,通过跟她的交谈,自己也找到了一些在理解上面的疏漏。二面有些压力面的意味,面试官感觉比较强势,问了推荐系统中大规模数据处理的情况,基本上把我说的都驳倒了,最终也止步于这一面。接着是搜狗,搜狗很幸运,没有通知笔试,直接面试。可惜没能把握住这次机会,当天不知道为什么,心情低落到极点,在骑车去面试地点的路上,整个乌云密布,开始面试的时候,基本上都不想说话,可想而知,悲剧收场。搜狗之后,很意外的收到盛大的面试通知,原来是内推的同学提前批面试,面试之前,对以往所有的面试小小的总结了一下,调整心情,这个面试感觉还可以,最终顺利的拿到口头offer。国庆节前,能拿到offer是很开心的一件事情。但我知道,国庆后,才是我的主战场。
国庆之后的第一场战役,就是google的笔试,多年的努力,皆起源于它,但深知自己之菜,离它的要求相差之远,所以自己的目标只是通过笔试,进入面试。后来,很可惜,我在笔试就被BS了,回想起来,没有自信,也许也是其中的一个原因。在被google鄙视的同时,还好没有时间去郁闷,因为这时候腾讯、百度、yahoo的笔试面试正如火如荼的进行着。很幸运的通过了三者的笔试。腾讯面试当天同百度、yahoo的笔试时间冲突,弄的hr很不高兴,最后被安排到最后一个,面试结束,走出纳德酒店已是晚上十点,最后也没逃脱被淘汰的结局。不过,也没有觉得太可惜,职位偏工程,和我目前的情况也不太契合。百度、yahoo很顺利的通过了三面,这也是我找工作以来面的最顺利的两家公司了,坦白的说,我自己是没有想到的。可能是所投的职位刚好能发挥我的所长,面试官问的问题都偏理论一些,对实际的项目经验要求不高。加上之前的面试也积攒下一些经验并及时将出现的漏洞和不太扎实的知识点稳固,使得在面对这两家公司的时候,还算是准备的比较充分。百度的offer如期而至,而yahoo却悬而未定,至今仍没有消息,开始对它的希望变成有些失望,最后趋于平淡,顺其自然吧。
今天去面了微策略,很不幸的被bs,不过能通过它的笔试,我也很开心。工作近于尾声,我想如果不出意外,我会去百度。开始最想的是在今年去一家外企,不过现在看来希望不大了。投递的最后一家公司是SAP,不知道会不会给我笔试的资格,如果有就去试一试。最后,总体感觉比较遗憾的是微软,在简历就筛掉了,投的是assistant researcher, 据说基本上不招研究生,只能说我撞到枪口上了。
整个找工作的过程,让我发现了很多以往在学习过程中疏忽但又非常重要的地方,基础知识也又重新复习了一遍。也很感谢一直以来给我鼓励,支持我的朋友们,offer虽不是我最想要的,但也已经很满足了。
2011年7月20日星期三
字符串匹配问题
为了准备面试,开始啃《编程之美》这本书,卡在“最短摘要生成“这一题已经很多天了,决心自己把代码实现,今天终于初步调试通过,在这里做一个小结。
思路书上写的很清楚,可以概括为:
1.先将页面分词,得到分词后的数组W,假设关键词数组为K。
2.对数组W进行扫描,第一次得到包含所有关键词的数组段,其起点和终点分别为beg和end,记下此时数组段的长度length。将beg指向数组段中下一个关键词,end向后移,继续扫描数组W,直到包含所有的关键词,将此时数组段的长度与length进行比较,若比其短,则记录下数组段的起始和终止位置,继续重复上述过程,直到数组W的末尾。
设数组W长为N,关键词数组长为M,此方法的时间复杂度为O( N*M )。
代码:
#include <iostream>
#include <string>
#include <map>
using namespace std;
void shortest_abstract(const string arrW[], const string arrK[], int * aBeg, int * aEnd, int lenW, int lenK);
int main()
{
int lenW, lenK;
int aBeg = -1;
int aEnd = -1;
cout << "Please enter the length of words and keys: " << endl;
cin >> lenW >> lenK;
string * arrW = new string[lenW];
string * arrK = new string[lenK];
cout << "Please enter words: " << endl;
for(int i = 0; i < lenW; i++)
cin >> arrW[i];
cout << "Plearse enter keys: " << endl;
for(int i = 0; i < lenK; i++)
cin >> arrK[i];
shortest_abstract(arrW, arrK, &aBeg, &aEnd, lenW, lenK);
if(aBeg == aEnd)
{
cout << "Can't contain all words." << endl;
}
else
{
cout << "The shortest abstract is: " << endl;
for(int i = aBeg; i <= aEnd; i++)
{
cout << arrW[i] << " ";
}
cout << endl;
}
return 0;
}
void shortest_abstract(const string arrW[], const string arrK[], int * aBeg, int * aEnd, int lenW, int lenK)
{
int i,j;
map<int, int> pos_key;//store the key's index and its corresponding poistion
int * pos = new int[lenK];
int count = 0; // the number of keys have been found
int beg = 0;
int end = 0;
int length; // the length contains all key words
int aLength = lenW; // the length of abstract
cout << "lenW = " << lenW << " lenK = " << lenK << endl;
//initial position
for(i = 0; i < lenK; i++)
pos[i] = -1;
// begin finding the shortest abstract
for(i = 0; i < lenW; i++)
{
for(j = 0; j < lenK; j++)
{
if(arrW[i] == arrK[j])
{
if(pos[j] == -1)
{
if(count == 0)
beg = i;
count++;
cout << "count = " << count << endl;
// This is the first time that find this key
pos[j] = i; // record key's position in words array
pos_key.insert( pair<int,int>(i,j) );
if(count == lenK)
{
end = i;
length = end - beg;
if(aLength > length)
{
cout << "------" << endl;
*aBeg = beg;
*aEnd = end;
aLength = length;
}
map<int, int>::iterator it;
it = pos_key.begin();
beg = (*it).first;
pos[(*it).second] = -1;
it++; // move beg to next word
beg = (*it).first;
it--;
pos_key.erase(it);
count--;
}
}
else
{
map<int, int>::iterator it;
it = pos_key.find(pos[j]);
// if this key word is the same as the begin word of abstract, then move beg to next word
if(beg == (*it).first)
{
it++;
beg = (*it).first;
it--;
}
pos_key.erase(it);
pos_key.insert( pair<int, int>(i,j) );
pos[j] = i; //update position to make it as the newest position
}
break;
}
}
}
cout << "aBeg = " << *aBeg << " aEnd = " << *aEnd << endl;
}
思路书上写的很清楚,可以概括为:
1.先将页面分词,得到分词后的数组W,假设关键词数组为K。
2.对数组W进行扫描,第一次得到包含所有关键词的数组段,其起点和终点分别为beg和end,记下此时数组段的长度length。将beg指向数组段中下一个关键词,end向后移,继续扫描数组W,直到包含所有的关键词,将此时数组段的长度与length进行比较,若比其短,则记录下数组段的起始和终止位置,继续重复上述过程,直到数组W的末尾。
设数组W长为N,关键词数组长为M,此方法的时间复杂度为O( N*M )。
代码:
#include <iostream>
#include <string>
#include <map>
using namespace std;
void shortest_abstract(const string arrW[], const string arrK[], int * aBeg, int * aEnd, int lenW, int lenK);
int main()
{
int lenW, lenK;
int aBeg = -1;
int aEnd = -1;
cout << "Please enter the length of words and keys: " << endl;
cin >> lenW >> lenK;
string * arrW = new string[lenW];
string * arrK = new string[lenK];
cout << "Please enter words: " << endl;
for(int i = 0; i < lenW; i++)
cin >> arrW[i];
cout << "Plearse enter keys: " << endl;
for(int i = 0; i < lenK; i++)
cin >> arrK[i];
shortest_abstract(arrW, arrK, &aBeg, &aEnd, lenW, lenK);
if(aBeg == aEnd)
{
cout << "Can't contain all words." << endl;
}
else
{
cout << "The shortest abstract is: " << endl;
for(int i = aBeg; i <= aEnd; i++)
{
cout << arrW[i] << " ";
}
cout << endl;
}
return 0;
}
void shortest_abstract(const string arrW[], const string arrK[], int * aBeg, int * aEnd, int lenW, int lenK)
{
int i,j;
map<int, int> pos_key;//store the key's index and its corresponding poistion
int * pos = new int[lenK];
int count = 0; // the number of keys have been found
int beg = 0;
int end = 0;
int length; // the length contains all key words
int aLength = lenW; // the length of abstract
cout << "lenW = " << lenW << " lenK = " << lenK << endl;
//initial position
for(i = 0; i < lenK; i++)
pos[i] = -1;
// begin finding the shortest abstract
for(i = 0; i < lenW; i++)
{
for(j = 0; j < lenK; j++)
{
if(arrW[i] == arrK[j])
{
if(pos[j] == -1)
{
if(count == 0)
beg = i;
count++;
cout << "count = " << count << endl;
// This is the first time that find this key
pos[j] = i; // record key's position in words array
pos_key.insert( pair<int,int>(i,j) );
if(count == lenK)
{
end = i;
length = end - beg;
if(aLength > length)
{
cout << "------" << endl;
*aBeg = beg;
*aEnd = end;
aLength = length;
}
map<int, int>::iterator it;
it = pos_key.begin();
beg = (*it).first;
pos[(*it).second] = -1;
it++; // move beg to next word
beg = (*it).first;
it--;
pos_key.erase(it);
count--;
}
}
else
{
map<int, int>::iterator it;
it = pos_key.find(pos[j]);
// if this key word is the same as the begin word of abstract, then move beg to next word
if(beg == (*it).first)
{
it++;
beg = (*it).first;
it--;
}
pos_key.erase(it);
pos_key.insert( pair<int, int>(i,j) );
pos[j] = i; //update position to make it as the newest position
}
break;
}
}
}
cout << "aBeg = " << *aBeg << " aEnd = " << *aEnd << endl;
}
2011年7月19日星期二
numpy及scipy安装
最近在看online lda的文章,同时也将文章里的算法的实现代码下载了下来一并学习。这次看的文章的算法是用python实现的,同时还用到python的两个数值计算库numpy和scipy。那么,要让代码跑起来,先要安装这两个库。期间几费周折,忘了ubuntu下可以直接apt-get,因为源里的资源都很全了。最后,直接用apt-get从源里安装,才算搞定。
sudo apt-get install build-dev python-numpy
sudo apt-get install python-numpy
sudo apt-get install build-dev python-scipy
sudo apt-get install python-scipy
要测试numpy是否安装成功,还要安装nose
sudo apt-get install python-nose
好吧,不能不说,ubuntu还是非常方便的。
sudo apt-get install build-dev python-numpy
sudo apt-get install python-numpy
sudo apt-get install build-dev python-scipy
sudo apt-get install python-scipy
要测试numpy是否安装成功,还要安装nose
sudo apt-get install python-nose
好吧,不能不说,ubuntu还是非常方便的。
2011年7月6日星期三
处女面
今天,进行了我进入预备找工作阶段的第一次面试。之前如火如荼的实习生招聘,我都强忍住了好奇,安份的奔波于实验室和图书馆之间,老实的看着论文、读着天书,感叹着自己的未来。
NI 是第一个来学校进行正式招聘的,这次主要是计算机专场招聘会。本以为是下午开宣讲,于是悠哉的跑去上自习,结果被真真的短信叫了回来,匆忙打印了简历,到了宣讲会会场,听了半头的宣讲。NI 主要是做嵌入式的,和我这两年来研究的内容关系不大,本来也是抱着去体验一下的心态,犹豫了要不要投简历,最终还是投了一份。
很幸运,在中午的时候收到了面试通知。下午将简历上所有的内容都复习了一篇,以备面试官问到相关的内容。在晚上面试前,给好友打了个电话,询问了一下,她下午去面试的,具体就是按照简历上的内容,问了一下相关的项目。心里稍微有了一些底,比较平静的开始了面试。
我的经历比较特殊,本科学的不是CS,面试官按照简历,从这个方面开始了交流。我一五一十的交代了跨专业考研的前因后果,面试馆这才罢休,开始了简历中技术性内容的提问。我的研究生阶段偏重于研究,所以简历的很大篇幅都在讲我的研究经历,面试官对此倒没有什么异议,我也给他讲了其中的一个模型,应该感觉还不错。但是,他对的我实践能力表示怀疑,因为我大多数时间都是在看论文,可能很少写程序,而且我本科还不是学计算机的。事实确实如此,时间和精力有限,大部分用来看论文了,花在写代码上的时间必然会减少。不过我确实写过一些程序,论文里的算法是需要实现的。“你在写程序的时候,遇到过怎样的不可预见的错误?”,“段错误“,”能具体举个例子吗?“”如数组越界、文件读取的时候遇到过“,”能更具体一些吗?”“我试试。。。。”于是,一段沉默,我已经忘了那次文件读取的错误在哪里了。很窘。“我给你出一个简单的算法题吧,就是链表反转,写个小函数“,”。。。。。“, 勉强写出来了,拿给面试官,面试官说可能还有问题,又细心的指出。好吧,此时我的已没有了仔细听的心情,被鄙视了。最后一个问题,是我向他提问,这个问题我在面试的时候已经问过了,就是关于机器人方面的研发,可惜他不是那个组的,具体情况不了解。这个面试过程就这样结束了。
经过了这次面试,有如下感悟:
1.自己的理论知识在外行人面前可以忽悠一下,但是内行人面前还远远不够,所以理论还要继续补充,不能懈怠。
2.自己对实践的重视不够,平时还是应该多写代码,多编程,将看新闻、发呆的时间都拿来写代码,抓紧最后的两个月。
3.要对自己有信心,尤其是在面试遇到编程问题的时候,要自信满满的,以肯定的语气回答。
4.自己对编程的基础,如数据结构的重视还是不够,需要再次的复习巩固。
最后,尽力去做,不要让自己后悔就好的。
NI 是第一个来学校进行正式招聘的,这次主要是计算机专场招聘会。本以为是下午开宣讲,于是悠哉的跑去上自习,结果被真真的短信叫了回来,匆忙打印了简历,到了宣讲会会场,听了半头的宣讲。NI 主要是做嵌入式的,和我这两年来研究的内容关系不大,本来也是抱着去体验一下的心态,犹豫了要不要投简历,最终还是投了一份。
很幸运,在中午的时候收到了面试通知。下午将简历上所有的内容都复习了一篇,以备面试官问到相关的内容。在晚上面试前,给好友打了个电话,询问了一下,她下午去面试的,具体就是按照简历上的内容,问了一下相关的项目。心里稍微有了一些底,比较平静的开始了面试。
我的经历比较特殊,本科学的不是CS,面试官按照简历,从这个方面开始了交流。我一五一十的交代了跨专业考研的前因后果,面试馆这才罢休,开始了简历中技术性内容的提问。我的研究生阶段偏重于研究,所以简历的很大篇幅都在讲我的研究经历,面试官对此倒没有什么异议,我也给他讲了其中的一个模型,应该感觉还不错。但是,他对的我实践能力表示怀疑,因为我大多数时间都是在看论文,可能很少写程序,而且我本科还不是学计算机的。事实确实如此,时间和精力有限,大部分用来看论文了,花在写代码上的时间必然会减少。不过我确实写过一些程序,论文里的算法是需要实现的。“你在写程序的时候,遇到过怎样的不可预见的错误?”,“段错误“,”能具体举个例子吗?“”如数组越界、文件读取的时候遇到过“,”能更具体一些吗?”“我试试。。。。”于是,一段沉默,我已经忘了那次文件读取的错误在哪里了。很窘。“我给你出一个简单的算法题吧,就是链表反转,写个小函数“,”。。。。。“, 勉强写出来了,拿给面试官,面试官说可能还有问题,又细心的指出。好吧,此时我的已没有了仔细听的心情,被鄙视了。最后一个问题,是我向他提问,这个问题我在面试的时候已经问过了,就是关于机器人方面的研发,可惜他不是那个组的,具体情况不了解。这个面试过程就这样结束了。
经过了这次面试,有如下感悟:
1.自己的理论知识在外行人面前可以忽悠一下,但是内行人面前还远远不够,所以理论还要继续补充,不能懈怠。
2.自己对实践的重视不够,平时还是应该多写代码,多编程,将看新闻、发呆的时间都拿来写代码,抓紧最后的两个月。
3.要对自己有信心,尤其是在面试遇到编程问题的时候,要自信满满的,以肯定的语气回答。
4.自己对编程的基础,如数据结构的重视还是不够,需要再次的复习巩固。
最后,尽力去做,不要让自己后悔就好的。
2011年3月21日星期一
ubuntu 开机不显示登录框
前天开机,结果ubuntu没有像以往一样显示登录框,进入tty重启了几次,还是一样的状况。于是google之,查看了一些贴子后,基本断定是前几天安装的zlib与ubuntu的系统冲突了,只要卸载zlib就可以解决。
卸载zlib的步骤很简单,进入安装zlib的目录,执行sudo make uninstall 即可。
我一直将下载的软件放在/home/athena/文档/software文件夹下,可以在tty下,中文乱码,而且目前我的系统还不能在tty下输入中文。这样,我就不能进入zlib的安装目录。好吧,接下来要做的就是搞定tty下的中文显示及输入。还好,也不难,搜索了一下,按照如下步骤完成了安装。
sudo apt-get install zhcon
sudo apt-get install fbterm
安装成功后就可以显示中文和输入中文了。
输入 zhcon --utf8
可以进行输入法切换。
最后,顺利进入zlib的安装目录,卸载之,重启。可爱的登录框出现~
卸载zlib的步骤很简单,进入安装zlib的目录,执行sudo make uninstall 即可。
我一直将下载的软件放在/home/athena/文档/software文件夹下,可以在tty下,中文乱码,而且目前我的系统还不能在tty下输入中文。这样,我就不能进入zlib的安装目录。好吧,接下来要做的就是搞定tty下的中文显示及输入。还好,也不难,搜索了一下,按照如下步骤完成了安装。
sudo apt-get install zhcon
sudo apt-get install fbterm
安装成功后就可以显示中文和输入中文了。
输入 zhcon --utf8
可以进行输入法切换。
最后,顺利进入zlib的安装目录,卸载之,重启。可爱的登录框出现~
2011年3月10日星期四
文件读取
今天,尝试着从txt文件中读取数据,数据里有字符串和数字,要将其分离。第一次处理这样的文件,在网页上查了很多相关的函数,最后初步完成了数据的读取。
文件中数据格式如下:
nUser = 1000990
这里采用fgets()函数进行按行读取,sscanf 进行字符串分割,将其分割成"nUser"和"1000990",再用atoi()将字符串“1000990”转换成整数。
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int userN, itemN, rateN;
main()
{
FILE *fr = fopen("stats1.txt", "r");
char str[40];
char sn[40];
char sv[40];
int num;
while(fgets(str,40,fr))
{
sscanf(str, "%[^=]=%s",sn, sv);
num = atoi(sv);
printf("%s %s %d\n",sn, sv, num);
}
}
文件中数据格式如下:
nUser = 1000990
这里采用fgets()函数进行按行读取,sscanf 进行字符串分割,将其分割成"nUser"和"1000990",再用atoi()将字符串“1000990”转换成整数。
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int userN, itemN, rateN;
main()
{
FILE *fr = fopen("stats1.txt", "r");
char str[40];
char sn[40];
char sv[40];
int num;
while(fgets(str,40,fr))
{
sscanf(str, "%[^=]=%s",sn, sv);
num = atoi(sv);
printf("%s %s %d\n",sn, sv, num);
}
}
订阅:
博文 (Atom)