以下基于ASCII碼,如果換做Unicode則應(yīng)該做相應(yīng)的變動,否則回出現(xiàn)過程錯誤。
string 轉(zhuǎn) CString
CString.format("%s", string.c_str());
char 轉(zhuǎn) CString
CString.format("%s", char*);
char 轉(zhuǎn) string
string s(char *);
string 轉(zhuǎn) char *
char *p = string.c_str();
CString 轉(zhuǎn) 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++標準函數(shù)庫》中說的
有三個函數(shù)可以將字符串的內(nèi)容轉(zhuǎn)換為字符數(shù)組和C—string
1.data(),返回沒有”{post.content}“的字符串數(shù)組
2,c_str(),返回有”{post.content}“的字符串數(shù)組
3,copy()
---------------------------------------------------------------
CString與int、char*、char[100]之間的轉(zhuǎn)換- -
CString與int、char*、char[100]之間的轉(zhuǎn)換- -
CString互轉(zhuǎn)int
將字符轉(zhuǎn)換為整數(shù),可以使用atoi、_atoi64或atol。
而將數(shù)字轉(zhuǎn)換為CString變量,可以使用CString的Format函數(shù)。如
CString s;
int i = 64;
s.Format("%d", i)
Format函數(shù)的功能很強,值得你研究一下。
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互轉(zhuǎn)char*
///char * TO cstring
CString strtest;
char * charpoint;
charpoint="give string a value";
strtest=charpoint;
///cstring TO char *
charpoint=strtest.GetBuffer(strtest.GetLength());
此處如果為Unicode編碼,則應(yīng)將char*改為wchar*,否則讀取的只有strtest的首字母,切忌最后的strtest.ReleaseBuffer()。
標準C里沒有string,char *==char []==string
可以用CString.Format("%s",char *)這個方法來將char *轉(zhuǎn)成CString。要把CString轉(zhuǎn)成char *,用操作符(LPCSTR)CString就可以了。
CString轉(zhuǎn)換 char[100]
char a[100];
CString str("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));
posted @
2010-03-03 10:48 人生在于攀登! 閱讀(420) |
評論 (0) |
編輯 收藏
1.類和函數(shù)的申明必須加上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.
類示例:
1
class AFX_EXT_CLASS CMyClass : public CDocument
2

{
3
// <body of class>
4
};
5
6
函數(shù)示例:
extern "C" AFX_EXT_CLASS Min(int, int); //導出函數(shù)
2.在類的頭文件中定義你dll中的資源值
示例:
1
#define IDR_MYMENU 9002 //菜單資源
2
#define ID_MYTEST 9003 //菜單下拉按鈕資源
3.類cpp文件編寫正確后編譯源程序
編譯結(jié)束后,在資源頭文件中會有你在類頭文件中定義的資源項,但是資源的值往往和你在類頭文件中定義的值不相同,你必須手工改過來
4.使用MFCDLL
(1).講生成號的.dll和.lib文件拷貝到你工程文件夾下,并且將你的類頭文件也拷貝到工程文件夾下,在你需要創(chuàng)建類對象的文件前包含頭文件
(2).把.lib文件添加到你的工程資源中
(3).加載dll資源
示例:
1
//MFC擴展dll中資源的加載 記得在編譯值錢需要在工程中導入相應(yīng)的lib文件,還有在工程文件夾中賦值dll中類的頭文件
2
HINSTANCE hdll = LoadLibrary("MFCEXTDLL.dll"); //加載dll文件
3
if (hdll != NULL) //判斷是否加載成功
4
{
5
HMENU hmen = LoadMenu(hdll, MAKEINTRESOURCE(IDR_MYMENU)); //從一個可執(zhí)行文件中加載菜單資源
6
::SetMenu(this->GetSafeHwnd(), hmen); //給窗口分配一個新的菜單
7
::DrawMenuBar(this->GetSafeHwnd()); //重新繪畫菜單
8
FreeLibrary(hdll); //釋放dll模塊實例
9
}
(4).添加你dll資源中的消息響應(yīng)函數(shù)
afx_msg void OnTestTestDLL();//函數(shù)申明
ON_COMMAND(ID_MYTEST, OnTestTestDLL) //消息映射
//函數(shù)實現(xiàn)
void CUSEMFCDLLDlg::OnTestTestDLL()


{

/**//*
Funcation body
*/
}
posted @
2009-09-01 16:53 人生在于攀登! 閱讀(183) |
評論 (0) |
編輯 收藏

CreateThread
1
HANDLE CreateThread(
2
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
3
DWORD dwStackSize, // initial thread stack size
4
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
5
LPVOID lpParameter, // argument for new thread
6
DWORD dwCreationFlags, // creation flags
7
LPDWORD lpThreadId // pointer to receive thread ID
8
);
9
參數(shù)信息:lpThreadAttributes 安全屬性結(jié)構(gòu)體指針
dwStackSize 分配給新線程的堆大小
lpStartAddress 只想新線程的入口函數(shù) 格式如下:

線程函數(shù)入口
1
DWORD WINAPI FunName(
2
LPVOID lpParameter
3
)
補充注意:入口函數(shù)不一定必須是上述格式(上述格式是msdn中提及的標準格式)
可以自定義函數(shù),但是創(chuàng)建線程時必須函數(shù)類型轉(zhuǎn)換,示例如下:
1
void fun(int &n)
2

{
3
cout<<"sdf"<<endl;
4
cout<<n<<endl;
5
}
6
int n=10;
7
HANDLE hThread3;
8
hThread3=CreateThread(NULL,0,(unsigned long (__stdcall *)(void *))fun,&n,0,NULL);
lpParameter 線程函數(shù)的參數(shù)
dwCreationFlags 創(chuàng)建標志(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;
}
1
BOOL CloseHandle(
2
HANDLE hObject // handle to object to close
3
);
4
關(guān)閉HANDLE句柄

CreateMutex
1
HANDLE CreateMutex(
2
LPSECURITY_ATTRIBUTES lpMutexAttributes,
3
// pointer to security attributes
4
BOOL bInitialOwner, // flag for initial ownership
5
LPCTSTR lpName // pointer to mutex-object name
6
);
7
參數(shù)信息:lpMutexAttributes 安全屬性結(jié)構(gòu)體指針 NULL是為默認的安全描敘符
bInitialOwner 為真時調(diào)用線程創(chuàng)建互斥對象,調(diào)用線程擁有互斥對象 為假時調(diào)用線程不擁有互斥對象
lpName 互斥對象的名稱

WaitForSingleObject
1
DWORD WaitForSingleObject(
2
HANDLE hHandle, // handle to object to wait for
3
DWORD dwMilliseconds // time-out interval in milliseconds
4
);
5
參數(shù)信息:hHandle Mutex對象(臨界區(qū))
dwMiliseconds 時間間隔(毫秒),超過時間間隔函數(shù)就返回 為0時馬上返回 為INFINITE時用不返回
返回:失敗返回WAIT_FAILED 否則返回一個引發(fā)這個函數(shù)的事件

ReleaseMutex
1
BOOL ReleaseMutex(
2
HANDLE hMutex // handle to mutex object
3
);
4
返回:成功返回非零數(shù) 否則返回0
posted @
2009-08-30 14:18 人生在于攀登! 閱讀(244) |
評論 (0) |
編輯 收藏
自創(chuàng)源代碼如下:
string pstr=pName+"-"+pID;
fwrite(pstr.c_str(),sizeof(pstr),1,file);
若pstr="12-34"
結(jié)果不是理想中那樣,打開文本后看到的是:12-34 屯屯屯屯 請問哪位大哥有更好是寫入方法,可以指教我就非常感謝了!
posted @
2009-08-07 14:29 人生在于攀登! 閱讀(1150) |
評論 (3) |
編輯 收藏
摘要:
閱讀全文
posted @
2009-08-07 14:24 人生在于攀登! 閱讀(2930) |
評論 (3) |
編輯 收藏
C語言編程練習題目: A出版社、B出版社是圖書出版發(fā)行領(lǐng)域的巨頭,A出版社出版的書籍種類涉及科技、外文、社科、衛(wèi)生、生活、體育等方面;B 出版社出版的書籍種類涉及科技、社科、衛(wèi)生、生活、體育、教育等方面。 C 書店、D書店、E 書店是 3 家著名的圖書銷售商,C 書店以銷售科技類書圖書聞名,同時也銷售外文、教育類書籍;D書店以銷售外文書籍店聞名,同時兼營科技、社科、教育類書籍;E 書店為銷售圖書種類最完全而著名,書籍種類包括科技、外文、社科、衛(wèi)生、生活、體育、教育等方面。 F、G是兩個典型的圖書購買者(圖書用戶),定期或不定期的去 E 書店買書;其中 F 是一個個人用戶,對科技、體育、生活類圖書非常感興趣,對這 3 類圖書是逢書必買;G是一個單位用戶,它對所有類的圖書都感興趣。 實體 A、B、C、D、E、F、G工作過程參見附一。 各個實體的初始化描述參見附二 題目要求: 請在Window下的VC6.0環(huán)境下,使用Win32 Console Application方式并采用多線程編程方式來模擬實體 A、B、C、D、E 之間的工作過程。 具體要求: 1.出版社、書店、圖書用戶作為獨立的單位,各自內(nèi)部信息相互保密,一般不隨意暴露: 2.出版社給書店提供以下接口: 注冊接口: 供書店用戶登陸注冊自己的信息,便于發(fā)定購通知; 參數(shù)信息: 書店 ID、 書店經(jīng)營圖書的種類、 通知的 Callback 函數(shù) 等等 查詢接口: 供書店用戶定購前查詢; 參數(shù)信息: 圖書種類 查詢種類(全部、新書、再版) 查詢結(jié)果返回 等等 定購接口: 供書店來定購書籍; 參數(shù)信息: 書店 ID 圖書名 購買數(shù)量 聯(lián)絡(luò)方式的 Callback(上次不足圖書的再版通知) 等等 3.書店(特別是 E 書店)給圖書購買者提供以下接口:查詢接口: 供圖書購買者購買前進行查詢; 參數(shù)信息: 圖書種類查詢種類(全部、新書、再版) 查詢結(jié)果返回 等等 購買接口: 供圖書購買者進行購買; 參數(shù)信息: 購買者ID 圖書名稱 購買數(shù)量 聯(lián)絡(luò)方式的Callback(上次不足圖書的到貨通知) 等等 4.在主線程中,控制各個實體的初始化、上述模擬活動的開始和停止; 5.出版社、書店、圖書購買的工作活動按照時間順序輸出到文件work.txt中; 6.為了驗證程序執(zhí)行的正確性,各個實體(A、B、C、D、E、F、G)都應(yīng)記載數(shù)據(jù), 出版社應(yīng)記錄: 出版(再版)書目、 庫存量、銷售量、銷售明細(每次銷售給那個書店多少冊)、定購書目數(shù)量以及明細(每次向誰定購了什么書、多少本)、銷售書目數(shù)量以及明細 圖書購買者:記錄購買書目數(shù)量以及明細。以上信息每隔30秒輸出一次,以便于核對程序執(zhí)行的正確性。 7.程序要考慮使用良好的程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)、程序講求效率。 附一A、B、C、D、E的工作描述 一、關(guān)于出版社工作 1.1出版 出版類型: 出版圖書類型:新書、再版(主要是由于銷售好而再版); 出版數(shù)量:新書出版的數(shù)量 A、B出版社:每隔10秒出版一種新圖書,每次1000冊,即 A出版圖書的順序為:科技(1000)->外文(1000)->社科(1000)->衛(wèi)生(1000)->生活(1000)->體育(1000)->科技(1000); B出版圖書的順序為:科技(1000)->社科(1000)->衛(wèi)生(1000)->生活(1000)->體育(1000)->教育(1000)->科技(1000) 再版圖書的數(shù)量以及再版 當出現(xiàn)缺貨時進行再版,每個書再版的數(shù)量為 (1)再版500冊(當缺貨數(shù)量<=500冊時); (2)大于缺貨數(shù)量并為1000的整數(shù)倍(當缺貨數(shù)量>500冊時); 再版請求要進行管理,每次再版不花時間。 出版書目相關(guān)信息 書目信息包括:編號、書名、種類、出版社等。 1.2發(fā)行(銷售) 具體工作包括: 發(fā)行通知: 出版新書,向所有訂閱此分類的書店通知, 再版,只通知訂購此種圖書但因缺貨沒買到書的書店。接受書店定購:如有貨,則發(fā)貨 否則,存貨部分進行銷售(同步完成),剩余部分轉(zhuǎn)再版處理(異步完成); 并且定購接口中,要有書店的信息,以便于再版后的通知(對上次購買不足的書店)。 1.3提供書目查詢服務(wù)提供向書店提供書目查詢服務(wù),查詢分類查書目、庫存等。 提供查詢希望能夠講求效率。 二、關(guān)于書店工作 2.1定購工作 定購分類兩類:一類是主動定購、另一類是被動定購; 被動定購:接到書店定購通知后去定購; 主動定購:當前書店銷售庫存為0,而發(fā)生的定購; 每次定購不限于一種圖書。 定購前,應(yīng)該進行相關(guān)書目信息的查詢。 E書店接到新書通知后每次訂購200冊 如果書店定購的圖書,出版社貨不足,則庫存有多少購買多少,不足部分等到圖書再版后通知再購買。(例如要購買500本,而庫存只有300本,則先購300本,剩下200本等到再版后再購買) 三、關(guān)于圖書購買者 G是一個單位用戶,對科技、外文、社科、衛(wèi)生、生活、體育、教育類圖書都感興趣,不定期從E書店購買新書,每次購買的數(shù)量是一個隨機數(shù)(小于500); 這里的不定期可以認為G每隔幾秒(小于8的隨機數(shù))到E書店查詢一次,看看是否有新書,如果有新書則一定購買新書,否則隨機購買一種原有的書,如果貨物不足,則庫存有多少購買多少,不足部分等到書店通知到貨后再購買。(例如要購買50本,而庫存只有30本,則先購30本,剩下20本等到書店到貨后再購買) 附二 系統(tǒng)的初始化描述 A出版社、B出版社、 C書店、 D書店、 E書店、F圖書購買者、G圖書購買者初始的數(shù)據(jù)都為空。 活動開始的順序為: 1. A、B出版社開始出書 2. 出版后,出版社通知注冊的書店(C、D、E),來定購; 3. 書店定購后,開始圖書銷售; 4. 圖書購買者(G)定期到書店買書; 練習要求:先模擬出版社A,書商E,圖書購買者G的交易過程,其余待完善
posted @
2009-08-03 17:10 人生在于攀登! 閱讀(270) |
評論 (2) |
編輯 收藏
摘要: 主要源代碼:
void CSpellGraphicDlg::OnUp() { // TODO: Add your control notification handler code here if (p.currentPoint/3==0) { &...
閱讀全文
posted @
2009-08-03 15:37 人生在于攀登! 閱讀(205) |
評論 (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==a && startPiontB==b && 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("你輸入數(shù)據(jù)有誤,請重新輸入:");
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 人生在于攀登! 閱讀(482) |
評論 (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);//必須使用指針地址作為實參才能修改指針所指內(nèi)容
printf("%c\n",*pa);
return 0;
}
posted @
2009-08-03 10:16 人生在于攀登! 閱讀(204) |
評論 (0) |
編輯 收藏
//回調(diào)函數(shù)
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函數(shù)調(diào)用
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 人生在于攀登! 閱讀(741) |
評論 (3) |
編輯 收藏