#include <fstream>
#include <iostream>
#include "/usr/local/mysql/include/mysql/mysql.h"
const char mysqlServer[20] = "10.88.15.114";
//const char mysqlServer[20] = "10.88.15.114";
const char user[20]="web";
const char password[20]="sinatest";
const char database[20]="enterprise";
unsigned int port=3306;
using namespace std;
int main()
{
MYSQL myData;
MYSQL_RES *res;
MYSQL_FIELD *fd;
MYSQL_ROW row;
int i,j,rowCount = 0,colCount = 0;
string query;
mysql_init( &myData );
if(!mysql_real_connect( &myData, mysqlServer, user, password, database,port,NULL,0))
{
printf("connect mysql error!\n");
}
cout <<"the mysql is ok!\n";
query = "select email from enterprisemail_info where enterpriseid=100334 ";
if( mysql_query(&myData, query.c_str()) != 0 )
{
printf("query error!\n");
cout << query;
return 0;
}else{
cout << "mysql query run ok!\n";
}
res = mysql_store_result( &myData );
rowCount = (int) mysql_num_rows( res );
colCount = (int) mysql_num_fields( res );
//cout << colCount<<"\t"<<rowCount<<"\n";
for(i = 0; i < rowCount; i++)
{
//第一种方法取出@前面的用户名
row = mysql_fetch_row( res );
char buffer[1024],buffer2[1024];
strcpy(buffer,row[0]);
char* p = strstr(buffer,"@");
*p=0;
cout <<"strstr="<<buffer<<"\t";
//第二种方法取出@前面的用户名
strcpy(buffer2,row[0]);
char* p2 = strstr(buffer2,"@");
int points= p2-buffer2;
string buffer3=buffer2;
cout<<"substr="<<buffer3.substr(0, points)<<endl;
}
cout <<"\n";
}
分离url里的get参数的键值~
[root@test geturi]# gcc geturi.c
[root@test geturi]# ./a.out
para1=val1
para2=val2
para3=val3
________________________________________________________________
头文件:#include <string.h>
strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。
摘自:http://c.biancheng.net/cpp/html/161.html
strchr与strstr函数,strchr函数的语法格式怎么用?它的作用与strstr函数有什么区别?
在C语言中 strchr 和 strstr函数都被包含在<string.h>头文件中,也就是要调用它们时要在程序前面包含<string.h>头文件,也就是写这个语句:#include<string.h>
strchr函数原型:char * strchr(char * str, int ch); 功能就是找出在字符串str中第一次出项字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是 null)。
strstr 函数原型: char * strstr(char * str1,char * str2);功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符串str2),找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)。
它们一个是求一个字符在字符串中得位置,另一个是求一个字符串在另一个字符串中的位置。
这些在C语言书最后面中都有的,你要学会去多看看书,要会自己解决问题。学编程是要有耐心的,学久了就会懂了。
来自:http://zhidao.baidu.com/link?url=sANNu-OqOB2bmhvJuBEOC1n7S8oeuSOoBcx47GsH0UcScIr3uMFXiZsQNtTu1MNkJGnHuTtCjrBrNdDEcLy2eq
#include <iostream>
#include "/usr/local/mysql/include/mysql/mysql.h"
const char mysqlServer[20] = "10.88.15.114";
//const char mysqlServer[20] = "10.88.15.114";
const char user[20]="web";
const char password[20]="sinatest";
const char database[20]="enterprise";
unsigned int port=3306;
using namespace std;
int main()
{
MYSQL myData;
MYSQL_RES *res;
MYSQL_FIELD *fd;
MYSQL_ROW row;
int i,j,rowCount = 0,colCount = 0;
string query;
mysql_init( &myData );
if(!mysql_real_connect( &myData, mysqlServer, user, password, database,port,NULL,0))
{
printf("connect mysql error!\n");
}
cout <<"the mysql is ok!\n";
query = "select email from enterprisemail_info where enterpriseid=100334 ";
if( mysql_query(&myData, query.c_str()) != 0 )
{
printf("query error!\n");
cout << query;
return 0;
}else{
cout << "mysql query run ok!\n";
}
res = mysql_store_result( &myData );
rowCount = (int) mysql_num_rows( res );
colCount = (int) mysql_num_fields( res );
//cout << colCount<<"\t"<<rowCount<<"\n";
for(i = 0; i < rowCount; i++)
{
//第一种方法取出@前面的用户名
row = mysql_fetch_row( res );
char buffer[1024],buffer2[1024];
strcpy(buffer,row[0]);
char* p = strstr(buffer,"@");
*p=0;
cout <<"strstr="<<buffer<<"\t";
//第二种方法取出@前面的用户名
strcpy(buffer2,row[0]);
char* p2 = strstr(buffer2,"@");
int points= p2-buffer2;
string buffer3=buffer2;
cout<<"substr="<<buffer3.substr(0, points)<<endl;
}
cout <<"\n";
}
分离url里的get参数的键值~
[root@test geturi]# gcc geturi.c
[root@test geturi]# ./a.out
para1=val1
para2=val2
para3=val3
________________________________________________________________
头文件:#include <string.h>
strchr() 用来查找某字符在字符串中首次出现的位置,其原型为:
char * strchr (const char *str, int c);
【参数】str 为要查找的字符串,c 为要查找的字符。
strchr() 将会找出 str 字符串中第一次出现的字符 c 的地址,然后将该地址返回。
摘自:http://c.biancheng.net/cpp/html/161.html
strchr与strstr函数,strchr函数的语法格式怎么用?它的作用与strstr函数有什么区别?
在C语言中 strchr 和 strstr函数都被包含在<string.h>头文件中,也就是要调用它们时要在程序前面包含<string.h>头文件,也就是写这个语句:#include<string.h>
strchr函数原型:char * strchr(char * str, int ch); 功能就是找出在字符串str中第一次出项字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是 null)。
strstr 函数原型: char * strstr(char * str1,char * str2);功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符串str2),找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)。
它们一个是求一个字符在字符串中得位置,另一个是求一个字符串在另一个字符串中的位置。
这些在C语言书最后面中都有的,你要学会去多看看书,要会自己解决问题。学编程是要有耐心的,学久了就会懂了。
来自:http://zhidao.baidu.com/link?url=sANNu-OqOB2bmhvJuBEOC1n7S8oeuSOoBcx47GsH0UcScIr3uMFXiZsQNtTu1MNkJGnHuTtCjrBrNdDEcLy2eq
char s1[4]="12",*ptr=s1;,ptr指向数组s1的 ,而*(ptr+1)的值是?
char s1[4]="12";
上式等价于 char s1[4]={'1','2','\0','\0'};
*ptr=s1;
ptr指向s1的首地址,即&s1[0],也可表示为&ptr[0]
*(ptr+1) 即为*(&ptr[1]),为*(&s1[1]), 值为2
由于数组名代表的就是数组的首元素的地址,作为char型指针的ptr被初始化为s1,所以ptr就指向了数组s1的首元素1,ptr的值就是& s1[0],即数组s1首元素s1[0]的地址。那么ptr+1就指向了数组s1的下一个元素,也就是第二个元素2,ptr+1的值就是&s1 [1],即数组s1的第二个元素的地址,*(ptr+1)对这个地址反引用,就取出这个地址里面的值,就是2
楼主要多看看你们的课本上关于指针的操作,取地址,反引用,数组名这些部分。
char s1[4]="12";
上式等价于 char s1[4]={'1','2','\0','\0'};
*ptr=s1;
ptr指向s1的首地址,即&s1[0],也可表示为&ptr[0]
*(ptr+1) 即为*(&ptr[1]),为*(&s1[1]), 值为2
由于数组名代表的就是数组的首元素的地址,作为char型指针的ptr被初始化为s1,所以ptr就指向了数组s1的首元素1,ptr的值就是& s1[0],即数组s1首元素s1[0]的地址。那么ptr+1就指向了数组s1的下一个元素,也就是第二个元素2,ptr+1的值就是&s1 [1],即数组s1的第二个元素的地址,*(ptr+1)对这个地址反引用,就取出这个地址里面的值,就是2
楼主要多看看你们的课本上关于指针的操作,取地址,反引用,数组名这些部分。
C++:
[codes=html]
char buffer[1024],buffer2[1024];
strcpy(buffer,row[0]);
char* p = strstr(buffer,"@");
*p=0;
cout <<buffer<<"\t";
[/codes]
Js实现前两位为**:
[code]<script langrage="javascript">
var str='372647693';
str = "**"+str.substr(2);
alert(str);
</script>[/code]
输出:**2647693
Js实现后两位为**:
[code]<script langrage="javascript">
var str='372647693';
var len=str.length;
str =str.substr(0,len-2)+ "**";
alert(str);
</script>[/code]输出:3726476**
如果是整形,需要转换为string:
[code]<script langrage="javascript">
var str=372647693;
str='**'+str.toString().substr(2);
alert(str);
</script>[/code]
如果是string,需要转换为整形:
fileNum = parseInt(fileNum);
如果是string,需要转换为浮点形:
fileNum = parseFloat(fileNum);
解决JS浮点数(小数)计算加减乘除的BUG:
http://www.cnblogs.com/binjoo/archive/2012/09/10/2679151.html
[codes=html]
char buffer[1024],buffer2[1024];
strcpy(buffer,row[0]);
char* p = strstr(buffer,"@");
*p=0;
cout <<buffer<<"\t";
[/codes]
Js实现前两位为**:
[code]<script langrage="javascript">
var str='372647693';
str = "**"+str.substr(2);
alert(str);
</script>[/code]
输出:**2647693
Js实现后两位为**:
[code]<script langrage="javascript">
var str='372647693';
var len=str.length;
str =str.substr(0,len-2)+ "**";
alert(str);
</script>[/code]输出:3726476**
如果是整形,需要转换为string:
[code]<script langrage="javascript">
var str=372647693;
str='**'+str.toString().substr(2);
alert(str);
</script>[/code]
如果是string,需要转换为整形:
fileNum = parseInt(fileNum);
如果是string,需要转换为浮点形:
fileNum = parseFloat(fileNum);
解决JS浮点数(小数)计算加减乘除的BUG:
http://www.cnblogs.com/binjoo/archive/2012/09/10/2679151.html
cp /usr/local/share/vim/vim80/vimrc_example.vim ~/.vimrc #from:http://www.cnblogs.com/unsea/archive/2012/11/17/2774267.html
1、装好 vim 后,拷贝 vimrc_example.vim 到 ~/ 下,改名为 .vimrc,并做一些适当的修改,最重要的是关闭 vi 兼容模式(set nocompatible),色彩就自己按喜好来吧。
2、ls -G 可显示彩色,不喜欢这个配色的话可自定一个环境变量(好像是LSCOLORS),看看man 就明白了
我配置的是
setenv LSCOLORS ExGxFxdxCxegedabagExEx
3. 一些配置
” 在行前显示行号.关闭显示请用”set nonu”
set nu
” 启用语法高亮
syntax on
” 根据文件类型启用缩进
filetype indent on
set autoindent
” 查找时忽略大小些
set ic
” 查找文本高亮
set hls
” Wrap text instead of being on one line
set lbr
” 更改缺省配色方案为delek
colorscheme delek
1、装好 vim 后,拷贝 vimrc_example.vim 到 ~/ 下,改名为 .vimrc,并做一些适当的修改,最重要的是关闭 vi 兼容模式(set nocompatible),色彩就自己按喜好来吧。
2、ls -G 可显示彩色,不喜欢这个配色的话可自定一个环境变量(好像是LSCOLORS),看看man 就明白了
我配置的是
setenv LSCOLORS ExGxFxdxCxegedabagExEx
3. 一些配置
” 在行前显示行号.关闭显示请用”set nonu”
set nu
” 启用语法高亮
syntax on
” 根据文件类型启用缩进
filetype indent on
set autoindent
” 查找时忽略大小些
set ic
” 查找文本高亮
set hls
” Wrap text instead of being on one line
set lbr
” 更改缺省配色方案为delek
colorscheme delek
#include<string>
回答者:tolemi_longing - 兵卒 一级 1-16 15:04
好像是在string.h中。
回答者:张_银 - 江湖新秀 四级 1-16 15:11
没有这个函数,不过在类string中有这个函数
#include <string>
#include <iostream>
using namespace std;
int main()
{
string ss("hello");
cout<<ss.substr(0, 2)<<endl;
}
回答者:tolemi_longing - 兵卒 一级 1-16 15:04
好像是在string.h中。
回答者:张_银 - 江湖新秀 四级 1-16 15:11
没有这个函数,不过在类string中有这个函数
#include <string>
#include <iostream>
using namespace std;
int main()
{
string ss("hello");
cout<<ss.substr(0, 2)<<endl;
}
刚开始还以为我一个人有问题,发现我问题很像论坛:http://bbs.colorful.cn/Forum/24775fa2-dafe-4c7b-93a4-835ff1010f16/Board/97e6593d-3918-49d8-b6d6-27369bdf8843/Thread/c40ce3c2-da16-4898-9e26-9ecd9eea2e84.aspx
事情是这样的,去年6月份毕业了,工作了两个月后,想升级一下电脑,但钱是不太多,于是玩得好的推荐买了主板七彩虹CN61G主板,说是gForce显卡挺不错的,安装后不久发现游戏卡,ping局域网发现掉包,拿到公司发现没有该问题,拿回来后又丢包,打魔兽卡,最后调整了一下网卡参数,好了。
过不老多久打游戏花屏,刚开始还没有发现主要是连局域网网时候老断线,解决掉断线后发现玩不了多久久挂了,花屏或者重启,于是否,换了个系统Vista,然后刚开始发现硬件错误,但装回xp后在装vista没问题,在这期间发现3600+cpu (40多纳米的)的温度65度,买了个铜皮风扇,设置bios在75度玩魔兽又出现重启,说明测量温度肯定不对,最后在BIOS里直接关了温度大于75度度重启,我日他仙人,最后还说玩得好好的突然重启或者花屏灰屏,有时后机器都关不了,但显示灰屏,还得强制关机,你说建立局域网游戏主机人家连不上不说连上后突然重启我还买个板干嘛?这样的东西能干嘛!
准备有空买个其他的板子,不管怎么说绝对不买七彩虹的垃圾板子。我考,太垃圾了,稳定性能这么烂还说什么承载一切可能?我觉得应该是存在一切可能更合适不过了,送给我我都不要,绝对垃圾的一款被我装上,我是倒了八辈子的霉了。。。
本人还做过显卡驱动更新,AMD3600+双核补丁,用windows下的Biosflash108q.exe刷新BIOS,但没有成功,说什么protect,我日它奶奶的,垃圾就是垃圾,送一句七彩虹Colorful_CN61G:存在一切可能!
我看到什么龙之队就恶心,脓之队还差不多。。。。什么玩意!
下载了一个:七彩虹 C.N61G主板BIOS 1003版For DOS(2007.2.2),在NTFS DOS下安装成功,周末在看还有没有问题!
还发现一个网友的问题:http://bbs.colorful.cn/forum/24775fa2-dafe-4c7b-93a4-835ff1010f16/Board/97e6593d-3918-49d8-b6d6-27369bdf8843/Thread/5d44624a-5ac9-49a2-b516-7902a4b830cd.aspx
事情是这样的,去年6月份毕业了,工作了两个月后,想升级一下电脑,但钱是不太多,于是玩得好的推荐买了主板七彩虹CN61G主板,说是gForce显卡挺不错的,安装后不久发现游戏卡,ping局域网发现掉包,拿到公司发现没有该问题,拿回来后又丢包,打魔兽卡,最后调整了一下网卡参数,好了。
过不老多久打游戏花屏,刚开始还没有发现主要是连局域网网时候老断线,解决掉断线后发现玩不了多久久挂了,花屏或者重启,于是否,换了个系统Vista,然后刚开始发现硬件错误,但装回xp后在装vista没问题,在这期间发现3600+cpu (40多纳米的)的温度65度,买了个铜皮风扇,设置bios在75度玩魔兽又出现重启,说明测量温度肯定不对,最后在BIOS里直接关了温度大于75度度重启,我日他仙人,最后还说玩得好好的突然重启或者花屏灰屏,有时后机器都关不了,但显示灰屏,还得强制关机,你说建立局域网游戏主机人家连不上不说连上后突然重启我还买个板干嘛?这样的东西能干嘛!
准备有空买个其他的板子,不管怎么说绝对不买七彩虹的垃圾板子。我考,太垃圾了,稳定性能这么烂还说什么承载一切可能?我觉得应该是存在一切可能更合适不过了,送给我我都不要,绝对垃圾的一款被我装上,我是倒了八辈子的霉了。。。
本人还做过显卡驱动更新,AMD3600+双核补丁,用windows下的Biosflash108q.exe刷新BIOS,但没有成功,说什么protect,我日它奶奶的,垃圾就是垃圾,送一句七彩虹Colorful_CN61G:存在一切可能!
我看到什么龙之队就恶心,脓之队还差不多。。。。什么玩意!
下载了一个:七彩虹 C.N61G主板BIOS 1003版For DOS(2007.2.2),在NTFS DOS下安装成功,周末在看还有没有问题!
还发现一个网友的问题:http://bbs.colorful.cn/forum/24775fa2-dafe-4c7b-93a4-835ff1010f16/Board/97e6593d-3918-49d8-b6d6-27369bdf8843/Thread/5d44624a-5ac9-49a2-b516-7902a4b830cd.aspx
原帖:[url=http://www.hur.cn/program/cc/cc15/200703/120754.html]http://www.hur.cn/program/cc/cc15/200703/120754.html[/url]
文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。
一、ASCII 输出
为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代<fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。 如果你猜是"fstream," 恭喜你答对了! 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。
如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。 我们现在开始讲输出部分,首先声明一个类对象。ofstream fout;
这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。
fout.open("output.txt");
你也可以把文件名作为构造参数来打开一个文件.
ofstream fout("output.txt");
这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。 对不了解控制台输出"cout"的人, 这里有个例子。
int num = 150;
char name[] = "John Doe";
fout << "Here is a number: " << num << "\n";
fout << "Now here is a string: " << name << "\n";
现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它会自动保存文件。 回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样:
fout << flush; fout.close();
现在你用文本编辑器打开文件,内容看起来是这样:
Here is a number: 150 Now here is a string: John Doe
很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作,对 "<<" 和">>" 比较熟悉了, 因为你接下来还要用到他们。继续…
二、ASCII 输入
输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复杂的内容之前, 先看一个文本:
12 GameDev 15.45 L This is really awesome!
为了打开这个文件,你必须创建一个in-stream对象,?像这样。
ifstream fin("input.txt");
现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在 "<<" (插入)?操作符之后,是">>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.
int number;
float real;
char letter, word[8];
fin >> number; fin >> word; fin >> real; fin >> letter;
也可以把这四行读取文件的代码写为更简单的一行。
fin >> number >> word >> real >> letter;
它是如何运作的呢? 文件的每个空白之后, ">>" 操作符会停止读取内容, 直到遇到另一个>>操作符. 因为我们读取的每一行都被换行符分割开(是空白字符), ">>" 操作符只把这一行的内容读入变量。这就是这个代码也能正常工作的原因。但是,可别忘了文件的最后一行。
This is really awesome!
如果你想把整行读入一个char数组, 我们没办法用">>"?操作符,因为每个单词之间的空格(空白字符)会中止文件的读取。为了验证:
char sentence[101]; fin >> sentence;
我们想包含整个句子, "This is really awesome!" 但是因为空白, 现在它只包含了"This". 很明显, 肯定有读取整行的方法, 它就是getline()。这就是我们要做的。
fin.getline(sentence, 100);
这是函数参数. 第一个参数显然是用来接受的char数组. 第二个参数是在遇到换行符之前,数组允许接受的最大元素数量. 现在我们得到了想要的结果:“This is really awesome!”。
你应该已经知道如何读取和写入ASCII文件了。但我们还不能罢休,因为二进制文件还在等着我们。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream fout("output.txt");
int num = 150;
char name[] = "John Doe";
fout << "Here is a number: " << num << "\n";
fout << "Now here is a string: " << name << "\n";
}
文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。
一、ASCII 输出
为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代<fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。 如果你猜是"fstream," 恭喜你答对了! 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。
如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。 我们现在开始讲输出部分,首先声明一个类对象。ofstream fout;
这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。
fout.open("output.txt");
你也可以把文件名作为构造参数来打开一个文件.
ofstream fout("output.txt");
这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。 对不了解控制台输出"cout"的人, 这里有个例子。
int num = 150;
char name[] = "John Doe";
fout << "Here is a number: " << num << "\n";
fout << "Now here is a string: " << name << "\n";
现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它会自动保存文件。 回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样:
fout << flush; fout.close();
现在你用文本编辑器打开文件,内容看起来是这样:
Here is a number: 150 Now here is a string: John Doe
很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作,对 "<<" 和">>" 比较熟悉了, 因为你接下来还要用到他们。继续…
二、ASCII 输入
输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复杂的内容之前, 先看一个文本:
12 GameDev 15.45 L This is really awesome!
为了打开这个文件,你必须创建一个in-stream对象,?像这样。
ifstream fin("input.txt");
现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在 "<<" (插入)?操作符之后,是">>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.
int number;
float real;
char letter, word[8];
fin >> number; fin >> word; fin >> real; fin >> letter;
也可以把这四行读取文件的代码写为更简单的一行。
fin >> number >> word >> real >> letter;
它是如何运作的呢? 文件的每个空白之后, ">>" 操作符会停止读取内容, 直到遇到另一个>>操作符. 因为我们读取的每一行都被换行符分割开(是空白字符), ">>" 操作符只把这一行的内容读入变量。这就是这个代码也能正常工作的原因。但是,可别忘了文件的最后一行。
This is really awesome!
如果你想把整行读入一个char数组, 我们没办法用">>"?操作符,因为每个单词之间的空格(空白字符)会中止文件的读取。为了验证:
char sentence[101]; fin >> sentence;
我们想包含整个句子, "This is really awesome!" 但是因为空白, 现在它只包含了"This". 很明显, 肯定有读取整行的方法, 它就是getline()。这就是我们要做的。
fin.getline(sentence, 100);
这是函数参数. 第一个参数显然是用来接受的char数组. 第二个参数是在遇到换行符之前,数组允许接受的最大元素数量. 现在我们得到了想要的结果:“This is really awesome!”。
你应该已经知道如何读取和写入ASCII文件了。但我们还不能罢休,因为二进制文件还在等着我们。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
ofstream fout("output.txt");
int num = 150;
char name[] = "John Doe";
fout << "Here is a number: " << num << "\n";
fout << "Now here is a string: " << name << "\n";
}
http://www.cftea.com/c/648.asp
曾经看到一篇文章,说删除数组中某一元素的步骤应该这样:
1、delete
2、元素前移
3、重设数组length
其实使用数组方法splice可以一步完成。
arrayObject.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
start 要删除的开始位置
deleteCount 要删除的个数
item1, item2, . . ., itemN 如果指定此值,可以在删除的位置插入元素。如果插入的是数组,则只取第一个元素
数组对象仅有一个属性,这个属性就是length,它表示数组的长度,即其中元素的个数。因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-1。和其他大多数语言不同的是,JavaScript数组的length属性是可变的,这一点需要特别注意。当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或等于 length的元素的值全部被丢失。下面是演示改变length属性的例子:
var arr=[12,23,5,3,25,98,76,54,56,76];
//定义了一个包含10个数字的数组
alert(arr.length); //显示数组的长度10
arr.length=12; //增大数组的长度
alert(arr.length); //显示数组的长度已经变为12
alert(arr[8]); //显示第9个元素的值,为56
arr.length=5; //将数组的长度减少到5,索引等于或超过5的元素被丢弃
alert(arr[8]); //显示第9个元素已经变为"undefined"
arr.length=10; //将数组长度恢复为10
alert(arr[8]); //虽然长度被恢复为10,但第9个元素却无法收回,显示"undefined"
由上面的代码我们可以清楚的看到length属性的性质。但length对象不仅可以显式的设置,它也有可能被隐式修改。JavaScript中可以使用一个未声明过的变量,同样,也可以使用一个未定义的数组元素(指索引超过或等于length的元素),这时,length属性的值将被设置为所使用元素索引的值加1。例如下面的代码:
var arr=[12,23,5,3,25,98,76,54,56,76];
alert(arr.length);
arr[15]=34;
alert(arr.length);
代码中同样是先定义了一个包含10个数字的数组,通过alert语句可以看出其长度为10。随后使用了索引为15的元素,将其赋值为15,即arr [15]=34,这时再用alert语句输出数组的长度,得到的是16。无论如何,对于习惯于强类型编程的开发人员来说,这是一个很令人惊讶的特性。事实上,使用new Array()形式创建的数组,其初始长度就是为0,正是对其中未定义元素的操作,才使数组的长度发生变化。
由上面的介绍可以看到,length属性是如此的神奇,利用它可以方便的增加或者减少数组的容量。因此对length属性的深入了解,有助于在开发过程中灵活运用。
曾经看到一篇文章,说删除数组中某一元素的步骤应该这样:
1、delete
2、元素前移
3、重设数组length
其实使用数组方法splice可以一步完成。
arrayObject.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
start 要删除的开始位置
deleteCount 要删除的个数
item1, item2, . . ., itemN 如果指定此值,可以在删除的位置插入元素。如果插入的是数组,则只取第一个元素
数组对象仅有一个属性,这个属性就是length,它表示数组的长度,即其中元素的个数。因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-1。和其他大多数语言不同的是,JavaScript数组的length属性是可变的,这一点需要特别注意。当length属性被设置得更大时,整个数组的状态事实上不会发生变化,仅仅是length属性变大;当length属性被设置得比原来小时,则原先数组中索引大于或等于 length的元素的值全部被丢失。下面是演示改变length属性的例子:
var arr=[12,23,5,3,25,98,76,54,56,76];
//定义了一个包含10个数字的数组
alert(arr.length); //显示数组的长度10
arr.length=12; //增大数组的长度
alert(arr.length); //显示数组的长度已经变为12
alert(arr[8]); //显示第9个元素的值,为56
arr.length=5; //将数组的长度减少到5,索引等于或超过5的元素被丢弃
alert(arr[8]); //显示第9个元素已经变为"undefined"
arr.length=10; //将数组长度恢复为10
alert(arr[8]); //虽然长度被恢复为10,但第9个元素却无法收回,显示"undefined"
由上面的代码我们可以清楚的看到length属性的性质。但length对象不仅可以显式的设置,它也有可能被隐式修改。JavaScript中可以使用一个未声明过的变量,同样,也可以使用一个未定义的数组元素(指索引超过或等于length的元素),这时,length属性的值将被设置为所使用元素索引的值加1。例如下面的代码:
var arr=[12,23,5,3,25,98,76,54,56,76];
alert(arr.length);
arr[15]=34;
alert(arr.length);
代码中同样是先定义了一个包含10个数字的数组,通过alert语句可以看出其长度为10。随后使用了索引为15的元素,将其赋值为15,即arr [15]=34,这时再用alert语句输出数组的长度,得到的是16。无论如何,对于习惯于强类型编程的开发人员来说,这是一个很令人惊讶的特性。事实上,使用new Array()形式创建的数组,其初始长度就是为0,正是对其中未定义元素的操作,才使数组的长度发生变化。
由上面的介绍可以看到,length属性是如此的神奇,利用它可以方便的增加或者减少数组的容量。因此对length属性的深入了解,有助于在开发过程中灵活运用。
http://hi.baidu.com/kofeffect/blog/item/5b71cefb9f6f51126d22ebd1.html
最近开始从事搜索引擎的工作,所以又重新开始了c/c++的旅程,时隔4年
不得不复习一下c/c++其中的内容,以下内容有网上别的朋友发表的,也有我自己总结的.
1. read
#include
ssize_t read(int filedes, void *buf, size_t nbytes);
返回值:读取到的字节数;0(读到 EOF);-1(出错)
read 函数从 filedes 指定的已打开文件中读取 nbytes 字节到 buf 中。以下几种情况会导致读取到的字节数小于 nbytes :
A. 读取普通文件时,读到文件末尾还不够 nbytes 字节。例如:如果文件只有 30 字节,而我们想读取 100 字节,那么实际读到的只有 30 字节,read 函数返回 30 。此时再使用 read 函数作用于这个文件会导致 read 返回 0 。
B. 从终端设备(terminal device)读取时,一般情况下每次只能读取一行。
C. 从网络读取时,网络缓存可能导致读取的字节数小于 nbytes 字节。
D. 读取 pipe 或者 FIFO 时,pipe 或 FIFO 里的字节数可能小于 nbytes 。
E. 从面向记录(record-oriented)的设备读取时,某些面向记录的设备(如磁带)每次最多只能返回一个记录。
F. 在读取了部分数据时被信号中断。
读操作始于 cfo 。在成功返回之前,cfo 增加,增量为实际读取到的字节数。
2. write
#include
ssize_t write(int filedes, const void *buf, size_t nbytes);
返回值:写入文件的字节数(成功);-1(出错)
write 函数向 filedes 中写入 nbytes 字节数据,数据来源为 buf 。返回值一般总是等于 nbytes,否则就是出错了。常见的出错原因是磁盘空间满了或者超过了文件大小限制。
对于普通文件,写操作始于 cfo 。如果打开文件时使用了 O_APPEND,则每次写操作都将数据写入文件末尾。成功写入后,cfo 增加,增量为实际写入的字节数。
int main(int argc, char *argv[])
{
int fd;
int nread;
//void *buf;
char buff[512];
//buf=&buff;
//printf ("%d",buf);
char *dev ="/dev/ttyS1";
/* 打开指定的串口设备 */
fd = OpenDev(dev);
if (fd>0) {
set_speed(fd);
}
else {
printf("Can't Open Serial Port!\n");
exit(1);
}
/* 设置串口的参数 */
if (set_para(fd)== 1) {
printf("Set Parity Error\n");
exit(1);
}
/* 在后台守候,检查缓冲区内是否有内容,并将缓冲区的
内容显示出来*/
while(1) {
int nread;
while ((nread = read(fd,buff,512))>0) {
printf ("nnread is %d\n",nread);
buff[nread+1]='\0';
int i;
for (i=0;i printf ("buff is %c\n",buff[i]);
}
printf ("buf is %s\n",buff);
}
}
}
上面是我写的一段程序,目的就是将串口收到的字符显示在控制台上。
现在我可以打印出nnread is "收到的字符的个数",但是无法打印出接收到的字符。
我想打印buff这个数组。但是无论如何也打印不出来。
我把这个数组定义成int形的。然后就可以打印出一些数字,我猜可能是ascii码值。
我没有看懂read函数的参数的具体的用法,特别是第二项那个指针。
最近开始从事搜索引擎的工作,所以又重新开始了c/c++的旅程,时隔4年
不得不复习一下c/c++其中的内容,以下内容有网上别的朋友发表的,也有我自己总结的.
1. read
#include
ssize_t read(int filedes, void *buf, size_t nbytes);
返回值:读取到的字节数;0(读到 EOF);-1(出错)
read 函数从 filedes 指定的已打开文件中读取 nbytes 字节到 buf 中。以下几种情况会导致读取到的字节数小于 nbytes :
A. 读取普通文件时,读到文件末尾还不够 nbytes 字节。例如:如果文件只有 30 字节,而我们想读取 100 字节,那么实际读到的只有 30 字节,read 函数返回 30 。此时再使用 read 函数作用于这个文件会导致 read 返回 0 。
B. 从终端设备(terminal device)读取时,一般情况下每次只能读取一行。
C. 从网络读取时,网络缓存可能导致读取的字节数小于 nbytes 字节。
D. 读取 pipe 或者 FIFO 时,pipe 或 FIFO 里的字节数可能小于 nbytes 。
E. 从面向记录(record-oriented)的设备读取时,某些面向记录的设备(如磁带)每次最多只能返回一个记录。
F. 在读取了部分数据时被信号中断。
读操作始于 cfo 。在成功返回之前,cfo 增加,增量为实际读取到的字节数。
2. write
#include
ssize_t write(int filedes, const void *buf, size_t nbytes);
返回值:写入文件的字节数(成功);-1(出错)
write 函数向 filedes 中写入 nbytes 字节数据,数据来源为 buf 。返回值一般总是等于 nbytes,否则就是出错了。常见的出错原因是磁盘空间满了或者超过了文件大小限制。
对于普通文件,写操作始于 cfo 。如果打开文件时使用了 O_APPEND,则每次写操作都将数据写入文件末尾。成功写入后,cfo 增加,增量为实际写入的字节数。
int main(int argc, char *argv[])
{
int fd;
int nread;
//void *buf;
char buff[512];
//buf=&buff;
//printf ("%d",buf);
char *dev ="/dev/ttyS1";
/* 打开指定的串口设备 */
fd = OpenDev(dev);
if (fd>0) {
set_speed(fd);
}
else {
printf("Can't Open Serial Port!\n");
exit(1);
}
/* 设置串口的参数 */
if (set_para(fd)== 1) {
printf("Set Parity Error\n");
exit(1);
}
/* 在后台守候,检查缓冲区内是否有内容,并将缓冲区的
内容显示出来*/
while(1) {
int nread;
while ((nread = read(fd,buff,512))>0) {
printf ("nnread is %d\n",nread);
buff[nread+1]='\0';
int i;
for (i=0;i
}
printf ("buf is %s\n",buff);
}
}
}
上面是我写的一段程序,目的就是将串口收到的字符显示在控制台上。
现在我可以打印出nnread is "收到的字符的个数",但是无法打印出接收到的字符。
我想打印buff这个数组。但是无论如何也打印不出来。
我把这个数组定义成int形的。然后就可以打印出一些数字,我猜可能是ascii码值。
我没有看懂read函数的参数的具体的用法,特别是第二项那个指针。
错误在fwrite(file_contents,sizeof(file_content),1,fp);这一行.
第2个参数应该是写入块的大小.
应该是 (size_t)strlen(file_contens) 或者file_content.size()
======= 2008-03-11 13:33:25 您在来信中写道:=======
>yifeng,您好!
>
> #include
>#include
>using namespace std;
>int main()
>{
> string file_content="This is a test\n";
> const char* file_contents=file_content.c_str();
> FILE *fp;
> fp=fopen("/tmp/stu_list","wb");
> fwrite(file_contents,sizeof(file_content),1,fp);
> fclose(fp);
>
>}
>
>1.为何只有this是不是空格给截断了?
>2.为何要用const修饰
>3.如何才能把string给写入到文件中.
第2个参数应该是写入块的大小.
应该是 (size_t)strlen(file_contens) 或者file_content.size()
======= 2008-03-11 13:33:25 您在来信中写道:=======
>yifeng,您好!
>
> #include
>#include
>using namespace std;
>int main()
>{
> string file_content="This is a test\n";
> const char* file_contents=file_content.c_str();
> FILE *fp;
> fp=fopen("/tmp/stu_list","wb");
> fwrite(file_contents,sizeof(file_content),1,fp);
> fclose(fp);
>
>}
>
>1.为何只有this是不是空格给截断了?
>2.为何要用const修饰
>3.如何才能把string给写入到文件中.
Fcitx
sudo apt-get install im-switch fcitx
sudo im-switch -s fcitx -z default
im-switch -s fcitx -z default #注意:不加sudo
完成设置最好重启一下X,输入法就生效了
某些情况下可能,在安装了fcitx输入法以后可能会出现和SCIM并存的问题,解决方法如下:
sudo gedit /usr/lib/gtk-2.0/2.10.0/immodule-files.d/scim-gtk2-immodule.immodules
将内容改为如下:
# automatically generated by dh_gtkmodules, do not edit
“/usr/lib/gtk-2.0/2.10.0/immodules/im-scim.so”
“scim” “SCIM Input Method” “scim” “/usr/share/locale” “ja:ko”
#就是将最后一行中的"ja:ko:zh"修改为"ja:ko",这样修改以后,scim在中文环境下将不被启动
更多设置,请访问中文输入法fcitx 以及 英文Locale下使用中文输入法
[编辑] 激活输入法
* 重新启动Xwindow完成。按 Ctrl + 空格 键激活输入法。
sudo apt-get install im-switch fcitx
sudo im-switch -s fcitx -z default
im-switch -s fcitx -z default #注意:不加sudo
完成设置最好重启一下X,输入法就生效了
某些情况下可能,在安装了fcitx输入法以后可能会出现和SCIM并存的问题,解决方法如下:
sudo gedit /usr/lib/gtk-2.0/2.10.0/immodule-files.d/scim-gtk2-immodule.immodules
将内容改为如下:
# automatically generated by dh_gtkmodules, do not edit
“/usr/lib/gtk-2.0/2.10.0/immodules/im-scim.so”
“scim” “SCIM Input Method” “scim” “/usr/share/locale” “ja:ko”
#就是将最后一行中的"ja:ko:zh"修改为"ja:ko",这样修改以后,scim在中文环境下将不被启动
更多设置,请访问中文输入法fcitx 以及 英文Locale下使用中文输入法
[编辑] 激活输入法
* 重新启动Xwindow完成。按 Ctrl + 空格 键激活输入法。
添加Ubuntu的源
Feisty (7.04) 版本
* 请参阅 [[[Ubuntu简介]]]
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
sudo gedit /etc/apt/sources.list
* 用以下内容替换文件中的所有内容
deb http://archive.ubuntu.com/ubuntu/ feisty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ feisty main restricted universe multiverse
这里你也可以直接使用更快速的ubuntu.cn99.com的源(推荐):
deb http://ubuntu.cn99.com/ubuntu/ feisty main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ feisty main restricted universe multiverse
这里你还可以使用速度也非常快的的mirror.lupaworld.com的源:
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-security main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-updates main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-backports main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-proposed main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/ubuntu-cn/ feisty main restricted universe multiverse
如果是教育网用户请使用上海交通大学的源:
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-security main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-updates main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-backports main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-proposed main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu-cn/ feisty main multiverse restricted universe bleeding
上海电信的一个源:
deb http://mirror.rootguide.org/ubuntu/ feisty main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-proposed main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-updates main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-backports main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-security main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu-cn/ feisty main restricted universe multiverse
* 保存编辑好的文件
sudo apt-get update
Feisty (7.04) 版本
* 请参阅 [[[Ubuntu简介]]]
sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
sudo gedit /etc/apt/sources.list
* 用以下内容替换文件中的所有内容
deb http://archive.ubuntu.com/ubuntu/ feisty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ feisty-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ feisty main restricted universe multiverse
这里你也可以直接使用更快速的ubuntu.cn99.com的源(推荐):
deb http://ubuntu.cn99.com/ubuntu/ feisty main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-updates main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-backports main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu/ feisty-proposed main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu-cn/ feisty main restricted universe multiverse
这里你还可以使用速度也非常快的的mirror.lupaworld.com的源:
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-security main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-updates main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-backports main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/archive/ feisty-proposed main restricted universe multiverse
deb http://mirror.lupaworld.com/ubuntu/ubuntu-cn/ feisty main restricted universe multiverse
如果是教育网用户请使用上海交通大学的源:
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-security main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-updates main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-backports main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu/ feisty-proposed main multiverse restricted universe
deb http://ftp.sjtu.edu.cn/ubuntu-cn/ feisty main multiverse restricted universe bleeding
上海电信的一个源:
deb http://mirror.rootguide.org/ubuntu/ feisty main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-proposed main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-updates main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-backports main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu/ feisty-security main restricted universe multiverse
deb http://mirror.rootguide.org/ubuntu-cn/ feisty main restricted universe multiverse
* 保存编辑好的文件
sudo apt-get update
断断续续的学习C++也有三两个月了,(2006年8月下旬起)。很感谢C++,可以说它是
一种催化剂,让我自身的修养和人生观都有很大的提高。(当然这也离不开个人自身
的基础)
在C++大门前,我只能算是刚刚看到这个大门的台阶,但这段小小的距离让我受益颇
浅,现将其中心得奉献出来,欢迎老鸟指正,以供刚接触的新人参考。心得中,尽量减少对语言技术上的评论,以另一种心理来分析指正学习。
注:别人的心得和经验你可以学习,但是不可以完全照而搬之。因为每个人的心理,生活方式,看待事物及个人志向立场等等其他都不同,我的方法不一定适合你,但是可以学习借鉴。
在写之前,想先写一句话,千万不要以为你是天才,所谓天才即胜别人N倍的人,如果你真认为你是天才,请以天才的标准来要求自己,将自己付出和别人的比例以N:1来进行。
学习编程无外乎跟三者打交道,第一自己,第二编程,第三计算机。
第一自己:
心态:很多朋友都是在刚步入大学校门开始接触计算机或者其他。大学是一个很让人迷茫颓废的地方,可能你在高中踌躇满志,但在大学的管理机制下却心态渐糜。能够在大学(大一)里找到自己人生之志的人才是通过了大学的考验,能够真正迈上社会的人。
目标要明确,不要得过且过,不要追逐热门的东西。不管在什么时候,心里都要有自己的信念和理想,不要被其他东西左右了自己。
要从兴趣和竞争出发,因为这才是你产生动力源的地方。学东西时,要让自己先喜欢上它,要学会享受学习它的时间,喜欢乔丹的都知道,乔老爷子最常说的一句就是要享受比赛的时间。因为只有你喜欢上了它,享受了它,才不会被它所产生的压力压倒自己,不要产生一种厌恶的心理。而且心态要调整,不要一味的蛮学,死学,在没有什么兴趣学的时候可以先玩几天,在回过头来,或者用其他的方式来转换。
要抱着一种十年方能磨一剑的心理,扎扎实实从基础开始,不要为高速开发的一些现象所迷惑,那些都只是软件的功劳。我个人认为搞编程的英语和数学很重要,大家一定要时时的抓,至于怎么抓那就是另外一回事了,当然其他的知识也要汲取,可以多接触点天文,地理,人文方面的东西来补充自己。
转换的生活方式。要学会生活,在人的一生中,都会遇到一些很不开心的事,或者大大小小的意外,孙子兵法里面一句大意就是说,战场上要会将劣势转成优势,即最大的劣势很可能就是你的优势所在。一个打击你可以把他变为前进的动力,不必为了一点挫折和捶胸顿足,不必为了一点小事争吵不休。空闲的时候可以躺下来看看天,你就会明白自强不息,厚德载物之理。(看到一些为了失恋或者其他而堕落的人真的很难受和可惜)
要给人以帮助。别人有困难时或者一些举手之劳在自己解决范围内的尽力帮之,这对自己不会损失什么,相反在对方心里能够树立你的形象和增加好感。记住,给人之恩时也是给你自己铺路,这个世界不是靠你一个人可改变的。
第二编程:
语言的争论。几个月来,看到最有争议的帖子即关于某种语言好坏得,往往能顶个几百几千的人气。试问,中国牌子有几个不被骂的,试问,世界上哪部影片没人说他坏话的?术业有专攻,各司其职,每个语言的出现肯定都有自己价值和领域的范围,不同的只是价值和领域的高级和大小。就像高,矮,胖,瘦组成一个“型”。但是技术是进步的,这个进步也是在旧的基础上。放心,技术再飞跃也不会今天奔I,明天扣肉的迅速,在学习的同时也要时时关注整个语言界的走势(貌似哪个伟人说的与时俱进),保持一种同步曲线的前进。
语言能干什么?能问这句话,很欣慰。表明你是从基础学起才会问出这样的话来。但换而言之你一开始对这门语言调查的信息不足。庙算者胜,对自己身边的事物了解是非常重要的,这也能说明说你的教材或者教导你的人不够充分。如果是我对新手交流,我会花足时间让他明白这门语言是什么,能干什么,整个体系等等。这样在学的时候,对同一条语句上的理解你可能跟别人就不一样了, 因为你知道这门语言的体系架构,你可以从更多的特性角度去挖掘使用它。
提高自己对语言阅读能力。如何快速的进步?可以告诉你没有一步登天的办法,但是也可以告诉你如何让你快速掌握你所学的技术。多读他人代码,多领悟他人思维,多给自己出难题,多几种方法来解问题,多将语言的思想和身边的事物联系起来。想想你是怎么掌握普通话的,方法就不具体说了。
编程的思维。计算机是充满诱惑的东西,很多人都说热爱计算机,那只是它的表面,你热爱的只是他的一种扩展性的东西。能学计算机我很高兴,因为计算机从某种意义上来说将空间的距离给消除掉了。这里没有流血,没有牺牲。你可以以一种艺术家的思维来塑造它,可以以侦探的逻辑思维来破解它,可以以一种战争狂人的思维来摧毁它。你可以将你的这种思维体现在代码和整个布局里,不要惊异别人代码思维的异风,你也有自己的思维风格,你也可以,你也可以用自己代码让别人惊异。记住你学东西时更多的要体会他的思维,比如数学,微积分,离散,无数的定理,你学完以后可能永远都用不到,但是你可能有这种感觉,在你碰到某一问题时,这一问题的性质和你学到的东西很类似,但是中间就是差了一点东西,对了,这就是它思维上的一种运用,一种抽象,一种转换。
第三计算机
前面从说了很多,但是基本都是从理论上来说。因为我也没走到技术的高端(刚窥门槛还不到),说技术只是班门弄斧,但是我想我一些入门的方法还是可以和大家共享的。
前面提过,学一个东西首先要了解它,这样你才能知道你学的东西特性这个词。
不管你是什么目的学它的,你都要让自己喜欢上它。
建议新手们先从微机原理入手,弄懂后,再在自己脑中重绘一遍计算机的布局,学的时候,尽量将自己模拟的布局和语言给联系起来
接着学习英语,和数学,切记,学习数学是锻炼自己的逻辑,抽象和转换。
搞定这三个后再重新定位一下自己对计算机哪部分感兴趣,再从前辈中那里获取一些信息,这里教材和入门的准备很重要。一开始我也走了很多弯路,现在只能狂补英语和数学。
遇到问题时先不要问他人(常谈的问题了),应先以自己的所掌握的知识和思维来推敲问题,做个大胆的假设。
一种催化剂,让我自身的修养和人生观都有很大的提高。(当然这也离不开个人自身
的基础)
在C++大门前,我只能算是刚刚看到这个大门的台阶,但这段小小的距离让我受益颇
浅,现将其中心得奉献出来,欢迎老鸟指正,以供刚接触的新人参考。心得中,尽量减少对语言技术上的评论,以另一种心理来分析指正学习。
注:别人的心得和经验你可以学习,但是不可以完全照而搬之。因为每个人的心理,生活方式,看待事物及个人志向立场等等其他都不同,我的方法不一定适合你,但是可以学习借鉴。
在写之前,想先写一句话,千万不要以为你是天才,所谓天才即胜别人N倍的人,如果你真认为你是天才,请以天才的标准来要求自己,将自己付出和别人的比例以N:1来进行。
学习编程无外乎跟三者打交道,第一自己,第二编程,第三计算机。
第一自己:
心态:很多朋友都是在刚步入大学校门开始接触计算机或者其他。大学是一个很让人迷茫颓废的地方,可能你在高中踌躇满志,但在大学的管理机制下却心态渐糜。能够在大学(大一)里找到自己人生之志的人才是通过了大学的考验,能够真正迈上社会的人。
目标要明确,不要得过且过,不要追逐热门的东西。不管在什么时候,心里都要有自己的信念和理想,不要被其他东西左右了自己。
要从兴趣和竞争出发,因为这才是你产生动力源的地方。学东西时,要让自己先喜欢上它,要学会享受学习它的时间,喜欢乔丹的都知道,乔老爷子最常说的一句就是要享受比赛的时间。因为只有你喜欢上了它,享受了它,才不会被它所产生的压力压倒自己,不要产生一种厌恶的心理。而且心态要调整,不要一味的蛮学,死学,在没有什么兴趣学的时候可以先玩几天,在回过头来,或者用其他的方式来转换。
要抱着一种十年方能磨一剑的心理,扎扎实实从基础开始,不要为高速开发的一些现象所迷惑,那些都只是软件的功劳。我个人认为搞编程的英语和数学很重要,大家一定要时时的抓,至于怎么抓那就是另外一回事了,当然其他的知识也要汲取,可以多接触点天文,地理,人文方面的东西来补充自己。
转换的生活方式。要学会生活,在人的一生中,都会遇到一些很不开心的事,或者大大小小的意外,孙子兵法里面一句大意就是说,战场上要会将劣势转成优势,即最大的劣势很可能就是你的优势所在。一个打击你可以把他变为前进的动力,不必为了一点挫折和捶胸顿足,不必为了一点小事争吵不休。空闲的时候可以躺下来看看天,你就会明白自强不息,厚德载物之理。(看到一些为了失恋或者其他而堕落的人真的很难受和可惜)
要给人以帮助。别人有困难时或者一些举手之劳在自己解决范围内的尽力帮之,这对自己不会损失什么,相反在对方心里能够树立你的形象和增加好感。记住,给人之恩时也是给你自己铺路,这个世界不是靠你一个人可改变的。
第二编程:
语言的争论。几个月来,看到最有争议的帖子即关于某种语言好坏得,往往能顶个几百几千的人气。试问,中国牌子有几个不被骂的,试问,世界上哪部影片没人说他坏话的?术业有专攻,各司其职,每个语言的出现肯定都有自己价值和领域的范围,不同的只是价值和领域的高级和大小。就像高,矮,胖,瘦组成一个“型”。但是技术是进步的,这个进步也是在旧的基础上。放心,技术再飞跃也不会今天奔I,明天扣肉的迅速,在学习的同时也要时时关注整个语言界的走势(貌似哪个伟人说的与时俱进),保持一种同步曲线的前进。
语言能干什么?能问这句话,很欣慰。表明你是从基础学起才会问出这样的话来。但换而言之你一开始对这门语言调查的信息不足。庙算者胜,对自己身边的事物了解是非常重要的,这也能说明说你的教材或者教导你的人不够充分。如果是我对新手交流,我会花足时间让他明白这门语言是什么,能干什么,整个体系等等。这样在学的时候,对同一条语句上的理解你可能跟别人就不一样了, 因为你知道这门语言的体系架构,你可以从更多的特性角度去挖掘使用它。
提高自己对语言阅读能力。如何快速的进步?可以告诉你没有一步登天的办法,但是也可以告诉你如何让你快速掌握你所学的技术。多读他人代码,多领悟他人思维,多给自己出难题,多几种方法来解问题,多将语言的思想和身边的事物联系起来。想想你是怎么掌握普通话的,方法就不具体说了。
编程的思维。计算机是充满诱惑的东西,很多人都说热爱计算机,那只是它的表面,你热爱的只是他的一种扩展性的东西。能学计算机我很高兴,因为计算机从某种意义上来说将空间的距离给消除掉了。这里没有流血,没有牺牲。你可以以一种艺术家的思维来塑造它,可以以侦探的逻辑思维来破解它,可以以一种战争狂人的思维来摧毁它。你可以将你的这种思维体现在代码和整个布局里,不要惊异别人代码思维的异风,你也有自己的思维风格,你也可以,你也可以用自己代码让别人惊异。记住你学东西时更多的要体会他的思维,比如数学,微积分,离散,无数的定理,你学完以后可能永远都用不到,但是你可能有这种感觉,在你碰到某一问题时,这一问题的性质和你学到的东西很类似,但是中间就是差了一点东西,对了,这就是它思维上的一种运用,一种抽象,一种转换。
第三计算机
前面从说了很多,但是基本都是从理论上来说。因为我也没走到技术的高端(刚窥门槛还不到),说技术只是班门弄斧,但是我想我一些入门的方法还是可以和大家共享的。
前面提过,学一个东西首先要了解它,这样你才能知道你学的东西特性这个词。
不管你是什么目的学它的,你都要让自己喜欢上它。
建议新手们先从微机原理入手,弄懂后,再在自己脑中重绘一遍计算机的布局,学的时候,尽量将自己模拟的布局和语言给联系起来
接着学习英语,和数学,切记,学习数学是锻炼自己的逻辑,抽象和转换。
搞定这三个后再重新定位一下自己对计算机哪部分感兴趣,再从前辈中那里获取一些信息,这里教材和入门的准备很重要。一开始我也走了很多弯路,现在只能狂补英语和数学。
遇到问题时先不要问他人(常谈的问题了),应先以自己的所掌握的知识和思维来推敲问题,做个大胆的假设。
曾经有个小国到中国来,进贡了三个一模一样的金人,金壁辉煌,把皇帝高兴坏了。可是这小国不厚道,同时出一道题目:这三个金人哪个最有价值?
皇帝想了许多的办法,请来珠宝匠检查,称重量,看做工,都是一模一样的。怎么办?使者还等着回去汇报呢。泱泱大国,不会连这个小事都不懂吧?
最后,有一位退位的老大臣说他有办法。
皇帝将使者请到大殿,老臣胸有成足地拿着三根稻草,插入第一个金人的耳朵里,这稻草从另一边耳朵出来了。第二个金人的稻草从嘴巴里直接掉出来,而第三个金人,稻草进去后掉进了肚子,什么响动也没有。老臣说:第三个金人最有价值!使者默默无语,答案正确。
这个故事告诉我们,最有价值的人,不一定是最能说的人的人。老天给我们两只耳朵一个嘴巴,本来就是让我们多听少说的。善于倾听,才是成熟的人最基本的素质。
2\
陈阿土是台湾的农民,从来没有出过远门。攒了半辈子的钱,终于参加一个旅游团出了国。
国外的一切都是非常新鲜的,关键是,陈阿土参加的是豪华团,一个人住一个标准间。这让他新奇不已。
早晨,服务生来敲门送早餐时大声说道:“GOODMORNING SIR!”
陈阿土愣住了。这是什么意思呢?在自己的家乡,一般陌生的人见面都会问:“您贵姓?”
于是陈阿土大声叫道:“我叫陈阿土!”
如是这般,连着三天,都是那个服务生来敲门,每天都大声说:“GOODMORNING SIR!”而陈阿土亦大声回道:“我叫陈阿土!”
但他非常的生气。这个服务生也太笨了,天天问自己叫什么,告诉他又记不住,很烦的。终于他忍不住去问导游,“GOODMORNING
SIR!”是什么意思,导游告诉了他,天啊!!真是丢脸死了。
陈阿土反复练习“GOODMORNING SIR!”这个词,以便能体面地应对服务生。
又一天的早晨,服务生照常来敲门,门一开陈阿土就大声叫道:“GOODMORNING SIR!”
与此同时,服务生叫的是:“我是陈阿土!”
这个故事告诉我们,人与人交往,常常是意志力与意志力的较量。不是你影响他,就是他影响你,而我们要想成功,一定要培养自己的影响力,只有影响力大的人才可以成为最强者。
皇帝想了许多的办法,请来珠宝匠检查,称重量,看做工,都是一模一样的。怎么办?使者还等着回去汇报呢。泱泱大国,不会连这个小事都不懂吧?
最后,有一位退位的老大臣说他有办法。
皇帝将使者请到大殿,老臣胸有成足地拿着三根稻草,插入第一个金人的耳朵里,这稻草从另一边耳朵出来了。第二个金人的稻草从嘴巴里直接掉出来,而第三个金人,稻草进去后掉进了肚子,什么响动也没有。老臣说:第三个金人最有价值!使者默默无语,答案正确。
这个故事告诉我们,最有价值的人,不一定是最能说的人的人。老天给我们两只耳朵一个嘴巴,本来就是让我们多听少说的。善于倾听,才是成熟的人最基本的素质。
2\
陈阿土是台湾的农民,从来没有出过远门。攒了半辈子的钱,终于参加一个旅游团出了国。
国外的一切都是非常新鲜的,关键是,陈阿土参加的是豪华团,一个人住一个标准间。这让他新奇不已。
早晨,服务生来敲门送早餐时大声说道:“GOODMORNING SIR!”
陈阿土愣住了。这是什么意思呢?在自己的家乡,一般陌生的人见面都会问:“您贵姓?”
于是陈阿土大声叫道:“我叫陈阿土!”
如是这般,连着三天,都是那个服务生来敲门,每天都大声说:“GOODMORNING SIR!”而陈阿土亦大声回道:“我叫陈阿土!”
但他非常的生气。这个服务生也太笨了,天天问自己叫什么,告诉他又记不住,很烦的。终于他忍不住去问导游,“GOODMORNING
SIR!”是什么意思,导游告诉了他,天啊!!真是丢脸死了。
陈阿土反复练习“GOODMORNING SIR!”这个词,以便能体面地应对服务生。
又一天的早晨,服务生照常来敲门,门一开陈阿土就大声叫道:“GOODMORNING SIR!”
与此同时,服务生叫的是:“我是陈阿土!”
这个故事告诉我们,人与人交往,常常是意志力与意志力的较量。不是你影响他,就是他影响你,而我们要想成功,一定要培养自己的影响力,只有影响力大的人才可以成为最强者。
经营爱情
经营婚姻
一切的一切都要用心去经营
幸福要靠自己把握 用心把握
用心 努力
让生活的每一天充满快乐
让生活的每一天都满是激情
让生活的时时刻刻都溢满幸福
用心
经营婚姻
一切的一切都要用心去经营
幸福要靠自己把握 用心把握
用心 努力
让生活的每一天充满快乐
让生活的每一天都满是激情
让生活的时时刻刻都溢满幸福
用心