博文

介绍一下CWnd::OnCreate()的作用(2009-08-26 00:45:00)

摘要:  当Create or CreateEx 函数被调用时,OnCreate()它会被调用,所以,你可以重载OnCreate()来实现在某个窗口创建时附加首先要做的事情。     Usage:  CWnd::Create       virtual BOOL Create( LPCTSTR lpszClassName,                     LPCTSTR lpszWindowName,                     DWORD dwStyle,                     const RECT& rect,                    CWnd* pParentWnd,                    UINT nID,                 CCreateContext* pContext = NULL); &nb......

阅读全文(2337) | 评论:0

小笔记:strncpy函数(2009-08-26 00:04:00)

摘要:  strncpy 语法:     #include <string.h>  char *strncpy( char *to, const char *from, size_t count ); 功能:将字符串from 中至多count个字符复制到字符串to中。如果字符串from 的长度小于count,其余部分用'\0'填补。返回处理完成的字符串。   在学生管理系统上用到了: void CStudent::AddStudentName(char* pszName){ assert(pszName);  strncpy(m_pszName,pszName,MAX_NAME); m_pszName[MAX_NAME] = '\0';}......

阅读全文(1914) | 评论:0

丢硬币:正面朝上的最大连续序列(2009-08-25 16:10:00)

摘要:    //下面是第一次写的,结果不正确! #include<iostream>#include<ctime>using namespace std; int main(){ //create sequence: static int m=1; int digits[1000],max[500],i,maximum; srand(time(0)); for(i=0;i<1000;i++)  digits[i]=rand()%2; for(i=0;i<1000;i++)  cout<<digits[i]; cout<<endl<<endl; // deal with sequence:  max[1]=1; for(i=0;i<1000;) {  if(digits[i]=1)  {   max[m]++;   i++;  }  else  {   m++;   i++;  } } cout<<"m: "<<m<<endl; for(i=0;i<m;i++) {  maximum=(max[i+1]>max[i]? max[i+1]:max[i]); } cout<<maximum<<endl;  return 0;}......

阅读全文(1326) | 评论:7

replace文件中字符串【修改1】(2009-08-25 11:59:00)

摘要://Reverse_string.h   #ifndef REVERSE_STRING_H#define REVERSE_STRING_H #include<string> // #include<cstring>  will cause error! string   Reverse(string   str)   {     string   S;     int   n=str.size();     while(n>0)     {       n--;       S+=str[n];     }     return   S;   } string Convert(string str){  int n=str.size();  while(n>0)     {       n--;    if(str[n]>=65&&str[n]<=90) str[n]+=32;  //convert capital letter into small letter,in order to ignore the form     //str[n]=(str[n]>90? str[n]+32:str[n]);  }  return str;} string Ignore(string str){ int n=str.size(); string s; for(int i=0;i<n;i++) { &nbs......

阅读全文(1185) | 评论:1

在VisualC++中如何使用fopen()函数来读写文件(2009-08-25 10:31:00)

摘要:很多使用过Turbo C的朋友喜欢用fopen()函数来读写文件,在Visual C++环境中您也可以使用fopen()来读写文件。而且您还可以使用Visual C++中的标准的打开文件对话框,这样可以使选取读写文件的路径更方便。具体的做法是这样的。  首先您需要使用到MFC基本类库,在您原有的Visual C++程序中加上一个由CFileDialog类派生的新类,例如是CMyFileDialog,然后用这个新类定义一个对象,例如是:myDlg,使用这个对象的DoModal()方法,就可以呼出打开文件的对话框。这样,您只要把被选中的路径名及文件名传送给fopen()函数就可以打开读写这个文件了。  CMyFileDialog myDlg(true);  定义一个对话框对象  myDlg.DoModal();  呼出打开文件对话框  CString fileName;  定义一个Cstring类型的字符串来存储文件的路径及文件名  fileName=myDlg.GetPathName();  得到文件的路径及文件名  由于fopen()函数中需要的文件名参数是字符型的,所以我们还需要把CString类型的文件名转换为字符类型的变量。  int i, length;  定义i作为循环变量,定义length作为文件路径及文件名的长度  Char* FileName;  定义char型的字符指针来存储文件名,给fopen()函数使用  length=fileName.GetLength();  把文件名的长度赋给length变量  FileName=new char[length];  给char型的指针变量FileName分配内存空间  for(i=0;i把CString型变量fileName中的字符一个一个地赋给char型的指针变量FileName  *(FileName+i)=fileName.GetAt(i);  *(FileName+length)=NULL;  在FileName变量的最后加上一个结束标志  这样,您就要吧使用fopen(FileName,"w")来写文件,或者是用fopen(FileName,"r")来读文件了。FileName就是使用打开文件对话框得到的文件路径及文件名。     出自:http://www.qnr.......

阅读全文(1828) | 评论:0

replace文件中字符串(2009-08-25 10:10:00)

摘要:#ifndef REVERSE_STRING_H#define REVERSE_STRING_H #include<string> // #include<cstring>  will cause error! string   Reverse(string   str)   {     string   S;     int   n=str.size();     while(n>0)     {       n--;       S+=str[n];     }     return   S;   } string Convert(string str){  int n=str.size();  while(n>0)     {       n--;    if(str[n]>=65&&str[n]<=90) str[n]+=32;  //convert capital letter into small letter,in order to ignore the form     //str[n]=(str[n]>90? str[n]+32:str[n]);  }  return str;} string Ignore(string str){ int n=str.size(); string s; for(int i=0;i<n;i++) {  if((str[n]>=65&&......

阅读全文(1166) | 评论:0

【转】vc ON_CONTROL_RANGE 多个控件响应一个方法(2009-08-23 22:21:00)

摘要:分三个步骤 1.在头文件中声明函数例如 afx_msg void onNum(UINT uID) 2.在.cpp文件中添加函数体 void CCalculatorDlg::OnNum(UINT uID){UINT index=uID-IDC_NUM_0;CString num;num.Format(_T("%d"),index);AfxMessageBox(num);} 3.添加消息映射 ON_CONTROL_RANGE(BN_CLICKED,IDC_NUM_0,IDC_NUM_9,OnNum) 第一个参数 事件 第二个参数 控件的第一个id 第三个参数 空间的最后一个id 第四个参数 响应事件的方法 注意 id号必须是连续的 如果是自己手动修改的 请先点击 build -Clear   然后在重新编译......

阅读全文(1777) | 评论:1

C++中对浮点数的格式化显示(2009-08-22 15:39:00)

摘要: 在许多应用程序领域中,都需要控制小数点后的小数位,但是浮点数对此不能提供直接的支持。怎样对程序中的浮点数据进行"整齐"地格式化呢?在此我们有一个迂回的方法,先把它们转换为字符串,格式化后以文本形式显示出来。   在日常编程中——包括对话框、关系数据库、金融程序、SMS程序及一切处理数据文件的程序,需要控制小数点后的小数位的情况非常普遍,本文中将要讲解如何用简单的方法来控制小数位,另外,还要揭开字符串及数据精度的一点点小秘密。   问题的引出   如有一个函数,其可接受一个long double参数,并将参数转换为字符串,结果字符串应保留两位小数,例如,浮点值123.45678应该生成"123.45"这样的字符串。表面上看来这是一个意义不大的编程问题,然而,如果真要在实际中派上用场,函数应设计为具有一定弹性,以允许调用者指定小数位数。另外,函数也应该能够处理各种异常情况,如像123.0或123这样的整数。   在开始之前,先看一下编写"优雅"C++代码时的两句"真言":   "真言"1:无论何时需要格式化一个数值,都应先转换为一个字符串。这样可保证每位数刚好占据一个字符。   "真言"2:在需要转换为字符串时,请使用<sstream>库。   转换函数的接口非常简洁:第一个参数是需被格式化的数值;第二个参数代表小数点后显示的小数位,且应该具有一个默认值;返回值为一个string类型:  string do_fraction(long double value, int decplaces=3);   注意,第二个参数代表的小数位数中包括了小数点,因此,两位小数需要默认值为3.   精度问题   当然,第一步是把long double值转换为一个string,使用标准C++库<sstream>简直是手到擒来。然而,有一件事情必须引起注意,因为某些原因,stringstream对象默认精度为6,而许多程序员错误地把"精度"理解为小数的位数,这是不正确的,精度应指代全部位数。因而,数字1234.56可安全地通过默认精度6来表示,但12345.67会被截断为12345.6.这样的话,如果你有一个非常大的数,如1234567.8,它的结果会静悄悄地转换为科学记数法:1.23457e+06,这显然不是我们想要的。为避免这样......

阅读全文(1235) | 评论:0

分治法:合并排序(2009-08-22 14:03:00)

摘要://分治法:合并排序 int merge(int A[],int p,int q,int r)  //假设数组A[p...q]和A[q+1...r]已经排好序{ int n1=q-p+n; int n2=r-q; int L[n1],R[n2]; for(int i=1;i<=n1;i++)  L[i]=A[p+i-1]; for(int j=1;j<=n2;j++)  R[j]=A[q+j]; i=1; j=1; for(k=p;k<=r;k++) {  if(L[i]<=R[j])  {   A[k]=L[i];   i++  }  else  {   A[k]=R[j];   j++;  } }}......

阅读全文(1488) | 评论:0

字符串替换--Debug Error???(2009-08-21 21:46:00)

摘要:#include<iostream>#include<fstream>#include<cstdlib>#include<string>using namespace std; string replace_all(ifstream infile,string from,string to){ string str; infile>>str; cout<<"The basic string: "<<str<<endl; //replace: for(string::size_type pos(0);pos!=string::npos;pos+=to.length()) {  if((pos=str.find(from,pos))!=string::npos)   str.replace(pos,from.length(),to);  else   break; }  return str;} int main(){ string s,f,t; ofstream outfile("IOreplace.dat",ios::out); if(!outfile) {  cerr<<"open error!"<<endl;  exit(1); } cin>>s; outfile<<s; outfile.close();  //infile and replace  ifstream infile("IOreplace.dat",ios::in); if(!infile) {  cerr<<"open error!"<<endl;  exit(1); } cin>>f>>t; c......

阅读全文(1533) | 评论:0