 |
VC常用数据类型转换
|
|
| |
| 刚接触VC编程的朋友往往对许多数据类型的转换感到迷惑不解,本文将介绍一些常用数据类型的使用。我们先定义一些常见类型变量借以说明:
int i = 100;
long l = 2001;
float f=300.2;
double d=12345.119;
char username[]="程佩君";
char temp[200];
char *buf;
CString str;
_variant_t v1;
_bstr_t v2;
一、其它数据类型转换为字符串
短整型(int) itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); ///按二进制方式转换
长整型(long) ltoa(l,temp,10);
浮点数(float,double) 用fcvt可以完成转换,这是MSDN中的例子: int decimal, sign; char *buffer; double source = 3.1415926535; buffer = _fcvt( source, 7, &decimal, &sign ); 运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0 decimal表示小数点 ...
|
|
| 作者:不祥 bluejoe张贴于2006-11-10 16:42:10.0,共阅读4886次,回复4次 |
|
|
 |
vc2005 中 CString转化int,int 转化CString
|
|
| |
| CString转int方法:
CString h;
int a=_ttoi(h);
int转化CString方法:
int a=1263;
CString h;
h.Format(_T("%d"),a);
|
|
| 作者:junxi junxi张贴于2007-06-21 17:30:14.0,共阅读1728次,回复2次 |
|
|
 |
初学者请教个问题
|
|
| |
| 刚学vc++,我新建了一个mfc,取名"冒泡程序",我如何在冒泡程序.cpp中添加 OnLButtonDown()函数呢?我没有使用vc++.net
|
|
| 作者:leryang leryang张贴于2008-03-10 21:30:09.0,共阅读364次,回复4次 |
|
|
 |
第一次使用
|
|
| |
| ...第一次来不太会用这个,
|
|
| 作者:小忆 wjshuiyi张贴于2008-04-15 09:47:39.0,共阅读257次,回复0次 |
|
|
 |
最大公约数的求法
|
|
| |
| int mcd(int a, int b)
{
if( a <= 0 || b <= 0 )
return -1;
int max,min;
max = a > b ? a : b;
min = a + b - max;
int temp;
//辗转相除
while( min )
{
temp = min;
min = max % min;
max = temp;
}
return max;
}
|
|
| 作者:不祥 bluejoe张贴于2004-02-20 23:47:58.0,共阅读3497次,回复6次 |
|
|
 |
C++ Primer(第4版)习题解答[2]
|
|
| |
| 习题4.1
假设get_size是一个没有参数并返回int值的函数,下列哪些定义是非法的?为什么?
unsigned buf_size = 1024
(a) int ia[buf_size];
(b) int ia[get_size()];
(c) int ia[4*7-14];
(d) char st[11] = "fundamental" ;
【解答】
(a)非法,buf_size是一个变量,不能用于定义数组的维数(维长度)。
(b)非法,get_size()是函数调用,不是常量表达式,不能用于定义数组的维数(维长度)。
(d)非法,存放字符串"fundamental"的数组必须有12个元素,st只有11个元素。
习题4.2
下列数组的值是什么?
string sa[10];
int ia[10];
int main(){
string sa2[10];
int ia2[10];
}
【解答】
sa和sa2为元素类型为string的数组,自动调用string类的默认构造函数将各元素初始化为空字符串;ia为在函数体外定义的内置数组,各元素初始化为0;ia2为在函数体内定义的内置数组,各元素未初始化,其值不确定。
习题4.3
下列哪些定义是错误的?
(a) i ...
|
|
| 作者:白乔 bluejoe张贴于2008-02-19 13:33:40.0,共阅读611次,回复0次 |
|
|
 |
C++ Primer(第4版)习题解答
|
|
| |
| 习题1.1
查看所用的编译器文档,了解它所用的文件命名规范。编译并运行本节的main程序。
【解答】
一般而言,C++编译器要求待编译的程序保存在文件中。C++程序中一般涉及两类文件:头文件和源文件。大多数系统中,文件的名字由文件名和文件后缀(又称扩展名)组成。文件后缀通常表明文件的类型,如头文件的后缀可以是.h或.hpp等;源文件的后缀可以是.cc或.cpp等,具体的后缀与使用的编译器有关。通常可以通过编译器所提供的联机帮助文档了解其文件命名规范。
习题1.2
修改程序使其返回-1。返回值-1通常作为程序运行失败的指示器。然而,系统不同,如何(甚至是否)报告main函数运行失败也不同。重新编译并再次运行程序,看看你的系统如何处理main函数的运行失败指示器。
【解答】
笔者所使用的Windows操作系统并不报告main函数的运行失败,因此,程序返回-1或返回0在运行效果上没有什么区别。但是,如果在DOS命令提示符方式下运行程序,然后再键入echo %ERRORLEVEL%命令,则系统会显示返回值-1。
习题1.3
编一个程序,在标准输出上打印“Hello, World”。
【解答】
#include<iostream>
int main()
{
std::cout << "Hello, World" << std ...
|
|
| 作者:白乔 bluejoe张贴于2008-02-19 13:31:45.0,共阅读657次,回复0次 |
|
|
 |
指针参数是如何传递内存的?
|
|
| |
| 如果函数的参数是一个指针,不要指望用该指针去申请动态内存。示例7-4-1 中, Test 函数的语句GetMemory(str, 200)并没有使str 获得期望的内存,str 依旧是NULL, 为什么? void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(char) * num); } void Test(void) { char *str = NULL; GetMemory(str, 100); // str 仍然为 NULL strcpy(str, "hello"); // 运行错误 } 示例7-4-1 试图用指针参数申请动态内存 高质量C++/C 编程指南,v 1.0 2001 Page 48 of 101 毛病出在函数GetMemory 中。编译器总是要为函数的每个参数制作临时副本,指针 参数p 的副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p 的内容,就导致 参数p 的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_p 申请 了新的内存,只是把_p 所指的内存地址改变了,但是p 丝毫未变。所以函数GetMemory 并不能输出任何东西。事实上,每执行一次GetMemory 就会泄露一块内存,因为没有用 free 释放内存。 如果非得要用指针参数去申请内存,那么应该改 ...
|
|
| 作者:wlx weilaixi张贴于2007-07-02 12:54:19.0,共阅读1250次,回复2次 |
|
|
 |
求助:八叉树源代码
|
|
| |
| ...我想用八叉树对三维散乱点云进行分割然后精简,自己编了很久都没编出来,想问一下,大家谁有源代码啊,可不可以共享一下,谢谢。
|
|
| 作者:阿珂 likezhen821张贴于2007-12-10 23:24:10.0,共阅读504次,回复0次 |
|
|
 |
vc中操作Xml--使用CMarkup类
|
|
| |
| DotNet中使用xml相对比较轻松,在vc中操作xml,有些繁琐。最近在网络上得知CMarkup比较好用,于是试了下,还好,就把部分例子写出来。以后有时间的话,再写清楚点。
//----------UserInfo.xml--------------
<?xml version="1.0" encoding="UTF-8" ?>
<UserInfo>
<UserID>luo</UserID>
<UserID>lin</UserID>
</UserInfo>
1. 生成UserInfo.xml
CMarkup xml;
xml.SetDoc("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
xml.AddElem("UserInfo");
xml.IntoElem();
xml.AddElem("UserID","luo");
xml.AddElem("UserID","lin");
xml.OutOfElem();
xml.Save("UserInfo.xml");
2. 浏览特定元素
//----查看所有UserID----
CMarkup xml;
xml.Load("UserInfo.xml");
BOOL b ...
|
|
| 作者:不祥 bluejoe张贴于2006-11-10 16:44:04.0,共阅读5708次,回复7次 |
|
|
 |
三种常见中文内码的转换方法
|
|
| |
| 转篇文章给你,很好用的,直接使用函数,不用设置简体繁体对照表
三种常见中文内码的转换方法
我们平时常见的三种中文内码是:GB2312(简体中文)、GBK、BIG5(繁体中文)。网上有很多中文内码的专用转换工具。我们碰到由于内码不一致而导致的乱麻问题,用这些工具可以进行相互转换。但论坛里经常有人问如何在自己的程序中集成这些功能呢?本文将介绍如何利用 Windows 提供的API 函数来实现。转换涉及到的 API 函数主要有两个:MultiByteToWideChar 和 WideCharToMultiByte。有关这两个函数的详细文档请参考 MSDN,本文不再赘述。
本文将介绍四个转换函数分别实现如下的转换:
* Big5 => GBK
* GBK => Big5
* GB2312 => GBK
* GBK => GB2312
有关 GB2312 =〉BIG5 的转换以及 BIG5 =〉GB2312 的转换可以通过 GBK 间接实现。先将 GB2312 转成 GBK,再将 GBK 转成 BIG5,反之亦然。当然也可以自己实现它们之间的直接转换。
// Big5 => GBK:
void BIG52GBK(char *szBuf)
{
if(!strcmp(szBuf, ""))
...
|
|
| 作者:edog bluejoe张贴于2007-01-29 10:38:34.0,共阅读2119次,回复1次 |
|
|
 |
Windows消息值列表
|
|
| |
| /*
* Window Messages
*/
#define WM_NULL 0x0000
#define WM_CREATE 0x0001
#define WM_DESTROY 0x0002
#define WM_MOVE 0x0003
#define WM_SIZE 0x0005
#define WM_ACTIVATE 0x0006
/*
* WM_ACTIVATE state values
*/
#define WA_INACTIVE 0
#define WA_ACTIVE 1
#define WA_CLICKACTIVE 2
#define WM_SETFOCUS 0x0007
#define WM_KILLFOCUS 0x0008
#define WM_ENABLE 0x000A
#d ...
|
|
| 作者:不祥 bluejoe张贴于2004-03-11 09:15:39.0,共阅读3676次,回复2次 |
|
|
 |
在MFC中应用CTreeCtrl控件的技巧
|
|
| |
| 首先,我们要创建一个基本对话框的MFC工程MFC_TreeCRTL(名字随便给一个)。然后在资源视图中插入两个Dialog,ID分别为IDD_DIALOG11和IDD_DIALOG211,都更改Style属性为Child,Border属性为None,为它们建立两个类,分别命名为Cdialog11和Cdialog211,并在MFC_TreeCRTLDlg.CPP文件中包含dialog11.h和dialog211.h两个头文件。再导入几个资源图标作为树形控件节点的图标及装饰面板。最后在主面板上添加一个CTreeCtrl控件,ID为默认,并在ClassWizard中添加它的一个变量,命名为m_mytree。 接着,我们进行具体代码编写。 我们必须在CMFC_TreeCRTLDlg类中加入这些变量和函数 CDialog * m_treePages[2];
CString node_name;
BOOL InitMytree(); 我们还要在CMFC_TreeCRTLDlg类的构造函数中为m_treePages[2]分配空间, m_treePages[0]=new Cdialog11;
m_treePages[1]=new Cdialog211;
InitMytree()函数为m_mytree的初始化过程 BOOL CMFC_TreeCRTLDlg::Init ...
|
|
| 作者:不祥 qiaoyongbo张贴于2007-07-20 01:28:34.0,共阅读1667次,回复2次 |
|
|
 |
求助大牛……
|
|
| |
| 。。。写一个程序,生成一个命令行方式的可执行文件count.exe,用于统计输出成绩小于给定分数的学生人数。该可执行文件可接受两个参数p1和p2。其中p1为文件名(含路径),包含各个学生的成绩,p2为一个整数,表示需要统计的分数值。例如:
count.exe exam_result.txt 80
统计并输出exam_result.txt中所有成绩低于80分的人数。
Ps:定义Student类
class Student {
string id; // 学号
string name; // 姓名
int mark; // 成绩
public:
Student(const string &strID, const string &strName, int nMark = 0): id(strID), name(strName), mark(nMark) {}
Student(const Student &st) : id(st.id), name(st.name), mark(st.mark) {}
Student& operator = (const Student &st)
{
if (this != &st) { ...
|
|
| 作者:yaha deepsolo张贴于2007-09-03 18:51:12.0,共阅读531次,回复0次 |
|
|
 |
简单的错误
|
|
| |
| #include "sting.h"
#include "stdafx.h"
#include <stdio.h>
void main( void )
{
char string[80];
strcpy( string, "Hello world from " );
strcat( string, "strcpy " );
strcat( string, "and " );
strcat( string, "strcat!" );
printf( "String = %s\n", string );
}
编译后出现:
E:\vcprogram\test1\test1.cpp(11) : error C2065: ’strcpy’ : undeclared identifier E:\vcprogram\test1\test1.cpp(12) : error C2065: ’strcat’ : undeclared identifier
|
|
| 作者:vcstudy study张贴于2007-07-27 15:42:04.0,共阅读679次,回复0次 |
|
|
 |
来了这,才知道自己是多么多么的菜
|
|
| |
| ...多多指教
我用文件,和一维字符数组搞了一周还是没搞好,请用C++帮一下
4. 银行账户管理程序 问题描述 设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码、单位、电话号码、地址等,允许用户进行如下操作:开户、销户、存款、取款、转账、查询,一个用户可以有多个户头,账户的数值没有上限。 基本要求 程序运行时,可以由用户选择进行何种操作,开户操作要求输入用户信息后自动获取账号,用户销户后账号被回收,并且该账号可以继续分配给其它账户,不允许用户透支,根据姓名或账号可以进行用户的信息查询,所有的账户信息应存放到一个文件中,可以随时的访问和更新。 测试数据 程序应输入不少于10人的账户信息,应考虑到人员同名的情况。 实现提示 可定义一个账户类存放账户信息以及执行相应的操作,可以用一个链表类来管理账户。 选作内容 在上述程序的基础上,添加联名账户(一个联名账户有两个拥有者)的管理 。 我破碎的代码是
开户 输入姓名
初始化账号,账号指向0,判断next,
输入所有信息
输入金额时调用存款
输出所有信息
将信息保存于文件中 销户 判断金额
跳至取款
删除整行 ...
|
|
| 作者:cheehwa cheehwa529张贴于2007-06-27 18:24:03.0,共阅读945次,回复0次 |
|
|
 |
简单的格式化时间代码
|
|
| |
| CString AnalysisTime(int h,int m,int s)
{
CString time;
CString temp;
temp=h<10?"0%d":"%d";
temp+=":";
temp+=m<10?"0%d":"%d";
temp+=":";
temp+=s<10?"0%d":"%d";
time.Format(temp,h,m,s);
return time;
}
也能格式化日期
|
|
| 作者:不祥 xler张贴于2004-05-11 17:30:39.0,共阅读3338次,回复2次 |
|
|
 |
字符串拆分CStringTokenizer
|
|
| |
| 用以拆分字符串的类CStringTokenizer,使用示例:
CStringTokenizer st;
CStringArray terms;
st.GetTokens(&terms, "我们 是 社会主义 接班人", " ");void CStringTokenizer::GetTokens(CStringArray * pTokens,
CString sSource, CString sDelimiter)
{
pTokens->RemoveAll();
//开始解析
int nStart = 0;
int nLen = sDelimiter.GetLength();
while(true)
{
int i = sSource.Find(sDelimiter, nStart);
if(i < 0)
break;
if(i >= nStart)
{
CString s = sSource.Mid(nStart, i - nStart);
pTokens->Add(s);
}
nStart = i + nLen;
}
//剩下的字符串
if(nStart <= sSource.GetLength())
pTokens->Add(sSource.Mi ...
|
|
| 作者:不祥 bluejoe张贴于2007-01-16 14:10:32.0,共阅读1755次,回复0次 |
|
|
 |
从文件路径中获取文件名等信息
|
|
| |
| 从文件路径中(如:E:\projects\web\vcer\app\js\pageViewer.js)获取文件名等信息(如:pageViewer.js)获取文件的名字,Ext表明是否包含后缀
CString CUtil::GetFileTitleFromFileName(CString FileName, BOOL Ext)
{
int Where;
Where = FileName.ReverseFind('\\');
if (Where == -1)
Where = FileName.ReverseFind('/');
CString FileTitle = FileName.Right(FileName.GetLength() - 1 - Where);
if (!Ext)
{
int Which = FileTitle.ReverseFind('.');
if (Which != -1)
FileTitle = FileTitle.Left(Which);
}
return FileTitle;
}
获取文件所在的路径:
CString CUtil::GetFilePathFromFileName(CString FileName)
{
int Where;
Where = FileName.Re ...
|
|
| 作者:不祥 bluejoe张贴于2006-12-20 15:46:49.0,共阅读3741次,回复1次 |
|
|
 |
虚拟键盘代码Virtual-Key Codes
|
|
| |
| The following table shows the symbolic constant names, hexadecimal values, and mouse or keyboard equivalents for the virtual-key codes used by the system. The codes are listed in numeric order. Virtual-Key Codes -------------------------------------------------------------------------------- The following table shows the symbolic constant names, hexadecimal values, and mouse or keyboard equivalents for the virtual-key codes used by the system. The codes are listed in numeric order. Constants VK_LBUTTON (01) Left mouse button VK_RBUTTON (02) Right mouse button VK_CANCEL (03) Control-break proce ...
|
|
| 作者:不祥 bluejoe张贴于2007-01-10 13:19:17.0,共阅读2862次,回复0次 |
|
|