以下基于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 人生在于攀登! 閱讀(420) |
評論 (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
參數信息:lpThreadAttributes 安全屬性結構體指針
dwStackSize 分配給新線程的堆大小
lpStartAddress 只想新線程的入口函數 格式如下:

線程函數入口
1
DWORD WINAPI FunName(
2
LPVOID lpParameter
3
)
補充注意:入口函數不一定必須是上述格式(上述格式是msdn中提及的標準格式)
可以自定義函數,但是創建線程時必須函數類型轉換,示例如下:
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 線程函數的參數
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;
}
1
BOOL CloseHandle(
2
HANDLE hObject // handle to object to close
3
);
4
關閉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
參數信息:lpMutexAttributes 安全屬性結構體指針 NULL是為默認的安全描敘符
bInitialOwner 為真時調用線程創建互斥對象,調用線程擁有互斥對象 為假時調用線程不擁有互斥對象
lpName 互斥對象的名稱

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

ReleaseMutex
1
BOOL ReleaseMutex(
2
HANDLE hMutex // handle to mutex object
3
);
4
返回:成功返回非零數 否則返回0
posted @
2009-08-30 14:18 人生在于攀登! 閱讀(244) |
評論 (0) |
編輯 收藏
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 人生在于攀登! 閱讀(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("你輸入數據有誤,請重新輸入:");
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);//必須使用指針地址作為實參才能修改指針所指內容
printf("%c\n",*pa);
return 0;
}
posted @
2009-08-03 10:16 人生在于攀登! 閱讀(204) |
評論 (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 人生在于攀登! 閱讀(740) |
評論 (3) |
編輯 收藏