posts - 11,  comments - 12,  trackbacks - 0

以下基于ASCII码,如果换做Unicode则应该做相应的变动,否则回出现过程错误。
string
 转 CString 
CString.format("%s", string.c_str()); 

char 转 CString 
CString.format("%s", char*); 

char 转 string 
string s(char *); 

string 转 char * 
char *p = string.c_str(); 

CString 转 string 
string CStringTostring(CString str)
{
      string s;

     s.append(str.GetBuffer(str.GetLength()));

     str.ReleaseBuffer();

     return s;

}

1,string -> CString 
CString.format("%s", string.c_str()); 
用c_str()确实比data()要好. 
2,char -> string 
string s(char *); 
你的只能初始化,在不是初始化的地方最好还是用assign(). 


C++标准函数库》中说的 
有三个函数可以将字符串的内容转换为字符数组和C—string 
1.data(),返回没有”{post.content}“的字符串数组 
2,c_str(),返回有”{post.content}“的字符串数组 
3,copy() 

--------------------------------------------------------------- 

CString与int、char*、char[100]之间的转换- - 


CString与int、char*、char[100]之间的转换- - 



CString互转int 

将字符转换为整数,可以使用atoi、_atoi64或atol。 
而将数字转换为CString变量,可以使用CString的Format函数。如 
CString s; 
int i = 64; 
s.Format("%d", i) 
Format函数的功能很强,值得你研究一下。 

void CStrDlg::OnButton1() 

// TODO: Add your control notification handler code here 
CString 
ss="1212.12"; 
int temp=atoi(ss); 
CString aa; 
aa.Format("%d",temp); 
AfxMessageBox("var is " + aa); 


sart.Format("%s",buf); 

CString互转char* 

///char * TO cstring 
CString strtest; 
char * charpoint; 
charpoint="give string a value"; 
strtest=charpoint; 


///cstring TO char * 
charpoint=strtest.GetBuffer(strtest.GetLength()); 
此处如果为Unicode编码,则应将char*改为wchar*,否则读取的只有strtest的首字母,切忌最后的strtest.ReleaseBuffer()。
标准C里没有string,char *==char []==string 

可以用CString.Format("%s",char *)这个方法来将char *转成CString。要把CString转成char *,用操作符(LPCSTR)CString就可以了。 


CString转换 char[100] 

char a[100]; 
CString str("aaaaaa"); 
strncpy(a,(LPCTSTR)str,sizeof(a));

posted @ 2010-03-03 10:48 人生在于攀登! 阅读(412) | 评论 (0)编辑 收藏
1.类和函数的申明必须加上AFX_EXT_CLASS宏
AFX_EXT_CLASS宏的msdn解释:

Extension DLLs use the macro AFX_EXT_CLASS to export classes; the executables that link to the extension DLL use the macro to import classes. With the AFX_EXT_CLASS macro, the same header file(s) used to build the extension DLL can be used with the executables that link to the DLL.

类示例:
1class AFX_EXT_CLASS CMyClass : public CDocument
2{
3// <body of class>
4}
;
5
6
函数示例:
extern "C" AFX_EXT_CLASS Min(intint); //导出函数

2.在类的头文件中定义你dll中的资源值
示例:
1#define IDR_MYMENU 9002  //菜单资源
2#define ID_MYTEST 9003   //菜单下拉按钮资源
 
3.类cpp文件编写正确后编译源程序
编译结束后,在资源头文件中会有你在类头文件中定义的资源项,但是资源的值往往和你在类头文件中定义的值不相同,你必须手工改过来

4.使用MFCDLL
(1).讲生成号的.dll和.lib文件拷贝到你工程文件夹下,并且将你的类头文件也拷贝到工程文件夹下,在你需要创建类对象的文件前包含头文件
(2).把.lib文件添加到你的工程资源中
(3).加载dll资源
示例:
1//MFC扩展dll中资源的加载  记得在编译值钱需要在工程中导入相应的lib文件,还有在工程文件夹中赋值dll中类的头文件
2    HINSTANCE hdll = LoadLibrary("MFCEXTDLL.dll");  //加载dll文件
3    if (hdll != NULL)  //判断是否加载成功
4    {
5        HMENU hmen = LoadMenu(hdll, MAKEINTRESOURCE(IDR_MYMENU));  //从一个可执行文件中加载菜单资源
6        ::SetMenu(this->GetSafeHwnd(), hmen);   //给窗口分配一个新的菜单
7        ::DrawMenuBar(this->GetSafeHwnd());   //重新绘画菜单
8        FreeLibrary(hdll);  //释放dll模块实例
9    }
(4).添加你dll资源中的消息响应函数
afx_msg void OnTestTestDLL();//函数申明
ON_COMMAND(ID_MYTEST, OnTestTestDLL)   //消息映射
//函数实现
void CUSEMFCDLLDlg::OnTestTestDLL()
{
/*
   Funcation body
*/

}
posted @ 2009-09-01 16:53 人生在于攀登! 阅读(165) | 评论 (0)编辑 收藏
CreateThread
参数信息:lpThreadAttributes 安全属性结构体指针
dwStackSize 分配给新线程的堆大小
lpStartAddress 只想新线程的入口函数 格式如下:
线程函数入口
补充注意:入口函数不一定必须是上述格式(上述格式是msdn中提及的标准格式)
可以自定义函数,但是创建线程时必须函数类型转换,示例如下:
1void fun(int &n)
2{
3    cout<<"sdf"<<endl;
4    cout<<n<<endl;
5}

6int n=10;
7HANDLE hThread3;
8    hThread3=CreateThread(NULL,0,(unsigned long (__stdcall *)(void *))fun,&n,0,NULL);

lpParameter 线程函数的参数
dwCreationFlags 创建标志(0 or CREATE_SUSPENDED)
lpThreadId 新线程ID的接收变量
返回:成功返回句柄对象(HANDLE对象) 否则返回NULL GetLastError()返回错误信息
实例:
hThread1=CreateThread(NULL,0,ThreadFun1,NULL,0,NULL);
DWORD WINAPI ThreadFun1(
  LPVOID lpParameter   
)
{
    cout
<<"df"<<endl;
    
return 0;
}


1BOOL CloseHandle(
2  HANDLE hObject   // handle to object to close
3);
4
关闭HANDLE句柄

CreateMutex
参数信息:lpMutexAttributes 安全属性结构体指针 NULL是为默认的安全描叙符
bInitialOwner 为真时调用线程创建互斥对象,调用线程拥有互斥对象 为假时调用线程不拥有互斥对象
lpName 互斥对象的名称

WaitForSingleObject
参数信息:hHandle Mutex对象(临界区)
dwMiliseconds 时间间隔(毫秒),超过时间间隔函数就返回 为0时马上返回 为INFINITE时用不返回
返回:失败返回WAIT_FAILED 否则返回一个引发这个函数的事件



ReleaseMutex
返回:成功返回非零数 否则返回0



posted @ 2009-08-30 14:18 人生在于攀登! 阅读(234) | 评论 (0)编辑 收藏
自创源代码如下: 
string pstr=pName+"-"+pID; 
fwrite(pstr.c_str(),
sizeof(pstr),1,file); 
若pstr="12-34"
结果不是理想中那样,打开文本后看到的是:12-34 屯屯屯屯 请问哪位大哥有更好是写入方法,可以指教我就非常感谢了!
posted @ 2009-08-07 14:29 人生在于攀登! 阅读(1137) | 评论 (3)编辑 收藏
     摘要:   阅读全文
posted @ 2009-08-07 14:24 人生在于攀登! 阅读(2915) | 评论 (3)编辑 收藏
C语言编程练习题目: A出版社、B出版社是图书出版发行领域的巨头,A出版社出版的书籍种类涉及科技、外文、社科、卫生、生活、体育等方面;B 出版社出版的书籍种类涉及科技、社科、卫生、生活、体育、教育等方面。 C 书店、D书店、E 书店是 3 家著名的图书销售商,C 书店以销售科技类书图书闻名,同时也销售外文、教育类书籍;D书店以销售外文书籍店闻名,同时兼营科技、社科、教育类书籍;E 书店为销售图书种类最完全而著名,书籍种类包括科技、外文、社科、卫生、生活、体育、教育等方面。 F、G是两个典型的图书购买者(图书用户),定期或不定期的去 E 书店买书;其中 F 是一个个人用户,对科技、体育、生活类图书非常感兴趣,对这 3 类图书是逢书必买;G是一个单位用户,它对所有类的图书都感兴趣。 实体 A、B、C、D、E、F、G工作过程参见附一。 各个实体的初始化描述参见附二 题目要求: 请在Window下的VC6.0环境下,使用Win32 Console Application方式并采用多线程编程方式来模拟实体 A、B、C、D、E 之间的工作过程。 具体要求: 1.出版社、书店、图书用户作为独立的单位,各自内部信息相互保密,一般不随意暴露: 2.出版社给书店提供以下接口: 注册接口: 供书店用户登陆注册自己的信息,便于发定购通知; 参数信息: 书店 ID、 书店经营图书的种类、 通知的 Callback 函数 等等 查询接口: 供书店用户定购前查询; 参数信息: 图书种类 查询种类(全部、新书、再版) 查询结果返回 等等 定购接口: 供书店来定购书籍; 参数信息: 书店 ID 图书名 购买数量 联络方式的 Callback(上次不足图书的再版通知) 等等 3.书店(特别是 E 书店)给图书购买者提供以下接口:查询接口: 供图书购买者购买前进行查询; 参数信息: 图书种类查询种类(全部、新书、再版) 查询结果返回 等等 购买接口: 供图书购买者进行购买; 参数信息: 购买者ID 图书名称 购买数量 联络方式的Callback(上次不足图书的到货通知) 等等 4.在主线程中,控制各个实体的初始化、上述模拟活动的开始和停止; 5.出版社、书店、图书购买的工作活动按照时间顺序输出到文件work.txt中; 6.为了验证程序执行的正确性,各个实体(A、B、C、D、E、F、G)都应记载数据, 出版社应记录: 出版(再版)书目、 库存量、销售量、销售明细(每次销售给那个书店多少册)、定购书目数量以及明细(每次向谁定购了什么书、多少本)、销售书目数量以及明细 图书购买者:记录购买书目数量以及明细。以上信息每隔30秒输出一次,以便于核对程序执行的正确性。 7.程序要考虑使用良好的程序结构和数据结构、程序讲求效率。 附一A、B、C、D、E的工作描述 一、关于出版社工作 1.1出版 出版类型: 出版图书类型:新书、再版(主要是由于销售好而再版); 出版数量:新书出版的数量 A、B出版社:每隔10秒出版一种新图书,每次1000册,即 A出版图书的顺序为:科技(1000)->外文(1000)->社科(1000)->卫生(1000)->生活(1000)->体育(1000)->科技(1000); B出版图书的顺序为:科技(1000)->社科(1000)->卫生(1000)->生活(1000)->体育(1000)->教育(1000)->科技(1000) 再版图书的数量以及再版 当出现缺货时进行再版,每个书再版的数量为 (1)再版500册(当缺货数量<=500册时); (2)大于缺货数量并为1000的整数倍(当缺货数量>500册时); 再版请求要进行管理,每次再版不花时间。 出版书目相关信息 书目信息包括:编号、书名、种类、出版社等。 1.2发行(销售) 具体工作包括: 发行通知: 出版新书,向所有订阅此分类的书店通知, 再版,只通知订购此种图书但因缺货没买到书的书店。接受书店定购:如有货,则发货 否则,存货部分进行销售(同步完成),剩余部分转再版处理(异步完成); 并且定购接口中,要有书店的信息,以便于再版后的通知(对上次购买不足的书店)。 1.3提供书目查询服务提供向书店提供书目查询服务,查询分类查书目、库存等。 提供查询希望能够讲求效率。 二、关于书店工作 2.1定购工作 定购分类两类:一类是主动定购、另一类是被动定购; 被动定购:接到书店定购通知后去定购; 主动定购:当前书店销售库存为0,而发生的定购; 每次定购不限于一种图书。 定购前,应该进行相关书目信息的查询。 E书店接到新书通知后每次订购200册 如果书店定购的图书,出版社货不足,则库存有多少购买多少,不足部分等到图书再版后通知再购买。(例如要购买500本,而库存只有300本,则先购300本,剩下200本等到再版后再购买) 三、关于图书购买者 G是一个单位用户,对科技、外文、社科、卫生、生活、体育、教育类图书都感兴趣,不定期从E书店购买新书,每次购买的数量是一个随机数(小于500); 这里的不定期可以认为G每隔几秒(小于8的随机数)到E书店查询一次,看看是否有新书,如果有新书则一定购买新书,否则随机购买一种原有的书,如果货物不足,则库存有多少购买多少,不足部分等到书店通知到货后再购买。(例如要购买50本,而库存只有30本,则先购30本,剩下20本等到书店到货后再购买) 附二 系统的初始化描述 A出版社、B出版社、 C书店、 D书店、 E书店、F图书购买者、G图书购买者初始的数据都为空。 活动开始的顺序为: 1. A、B出版社开始出书 2. 出版后,出版社通知注册的书店(C、D、E),来定购; 3. 书店定购后,开始图书销售; 4. 图书购买者(G)定期到书店买书; 练习要求:先模拟出版社A,书商E,图书购买者G的交易过程,其余待完善
posted @ 2009-08-03 17:10 人生在于攀登! 阅读(246) | 评论 (2)编辑 收藏
     摘要: 主要源代码: void CSpellGraphicDlg::OnUp() { // TODO: Add your control notification handler code here if (p.currentPoint/3==0) { &...  阅读全文
posted @ 2009-08-03 15:37 人生在于攀登! 阅读(198) | 评论 (0)编辑 收藏

 

int getNum(int a,int b,int c,int d,int e){
 
static long int num=0;
 
static int startPointA=a,startPiontB=b;

 
if (startPointA==&& startPiontB==&& num!=0)
 
{
  
return 0;
 }


 
if ((b+d)%e==(a+c)%e)
 
{
  
return num+1;
 }

 
else{
  num
++;
  
return getNum((a+c)%e,(b+d)%e,c,d,e);
 }

 
return 0;
}


int main(){
int startPointA,startPointB,longA,longB,totalLong;
 printf(
"请依次输入青蛙A的起始点、青蛙B的起始点、青蛙A依次跳跃距离、青蛙B依次跳跃距离和总长度:");
 scanf(
"%d %d %d %d %d",&startPointA,&startPointB,&longA,&longB,&totalLong);
 
 
while (startPointA==startPointB)
 
{
  printf(
"你输入数据有误,请重新输入:");
  scanf(
"%d %d %d %d %d",&startPointA,&startPointB,&longA,&longB,&totalLong);
 }


 
 
int num=getNum(startPointA,startPointB,longA,longB,totalLong);

 
if (longA==longB || num==0)
 
{
  printf(
"Impossible\n");
 }

 
else
 
{
  printf(
"%d\n",num);
 }


 
return 0;
}

posted @ 2009-08-03 11:31 人生在于攀登! 阅读(474) | 评论 (0)编辑 收藏

void find1(char array[3],char search,char** pa){
 int i;
 for (i=0;*(array+i)!='\0';i++)
 {
  if (*(array+i)==search)
  {
   *pa=array+i;
   break;
  }
  else if (*(array+i)==0)
  {
   pa=0;
   break;
  }
 }
}

int main(){
 char array[]="dfyhgfhfhrtsxfvgsdfgdfgcsdtwe";
 char search='c';
 char *pa;
 pa=(char*)malloc(100);//必须给pa分配地址值

 find1(array,search,&pa);//必须使用指针地址作为实参才能修改指针所指内容

 printf("%c\n",*pa);

 return 0;
}

posted @ 2009-08-03 10:16 人生在于攀登! 阅读(196) | 评论 (0)编辑 收藏
//回调函数
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nIDEvent,DWORD dwTime){
  CTime time=CTime::GetCurrentTime();
  CString str=time.Format("%H:%M:%S");
  m_Time.SetWindowText(str);
 }

//SetTimer函数调用
CWnd::SetTimer(1,1000,TimerProc);

编译出错,错误信息如下:
C:\Documents and Settings\ttc\桌面\C_workplace\System_Time\System_TimeDlg.cpp(164) : error C2664: 'SetTimer' : cannot convert parameter 3 from 'void (struct HWND__ *,unsigned int,unsigned int,unsigned long)' to 'void (__stdcall *)(struct HWND__ *,un
signed int,unsigned int,unsigned long)'
        None of the functions with this name in scope match the target type

这是为什么???
期待高手解决!
posted @ 2009-07-31 10:54 人生在于攀登! 阅读(729) | 评论 (3)编辑 收藏
仅列出标题  下一页
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜