Board logo

主題: [閒聊]原來自己真的不懂...C/C++ [打印本頁]

發表人: deep_dream    時間: 2009-10-27 11:38 PM     主題: [閒聊]原來自己真的不懂...C/C++

等到真的上班了...
開始寫程式了...
才發現...
什麼?指標到底是搞什麼東西呀~~~
東指西指,亂指一堆我看不懂的東西...
指向字串的指標,其實就跟陣列一樣...
而陣列其實就是指標...
老師怎麼都沒說...很多書也沒說,雖然後來有的有說啦...
只是怎麼書上講的用法永遠都那麼簡單...事實上用根本不是這麼一回事...
怎麼可能永遠都是int * or char *

結構可以靠指標來傳...
甚至連函式都用指標來傳...

真是給它好用過頭的指標,我無言了...
覺得自己真的嫩到不行...
一切的重點都是在記憶體呀...

char *str = "C Programing is the best pl";
string s(str);

難到沒有更好的方法讓我使用string的函式卻不必複製記憶體呀~~~
想要使用 string::compare or string::find 等函式,偏偏原資料就是char *
天那~~~
發表人: oislone    時間: 2009-10-28 03:11 AM

char * 是 指標~
string 是類別吧~~

不一樣的東西~

char * 應該可以用 strcmp() 或者 memcmp() 來代替
還有 strchr 及 memchr 來代替~
發表人: RJ    時間: 2009-10-28 03:56 AM


引用:
deep_dream寫到:
難到沒有更好的方法讓我使用string的函式卻不必複製記憶體呀~~~
想要使用 string::compare or string::find 等函式,偏偏原資料就是char *
天那~~~

你用string的function不如copy char*的內容到string再做處理吧...或是利用強制轉換之類的處理過後再丟到目標去
string:c_str()很好用...有機會你自己去MSDN研究
範例...大概像這樣吧

char* ch1 = "aabbab";
ch1 = static_cast<string>(ch1).substr(static_cast<string>(ch1).find("aa"),3).c_str();

如果你需要的只是不需要另外宣告一個string變數就能使用string的function的話,那像這樣強制轉換後處理應該符合你需求
說穿了"string"這個類別也只是基於"char *"之外再增加一些字串處理function而已,可以直接強制轉換

說實在的,老師都不會交這些東西,因為老師們認為那是你應該要會的
正所謂"師父帶進門,修行看個人"
這些雖然課堂不教,但是老師出的作業多少都是磨練這些技能
不過你一開始說的指標陣列應該基本上都是會教的...只是說看老師是大略帶過還是仔細講解而已

[RJ 在  2009-10-28 04:06 AM 作了最後編輯]
發表人: deep_dream    時間: 2009-10-28 09:55 AM

我的確是有用到c_str(),但是那是讓char去讀string的字串。
因為我想要在一長串的字串中找某特定「字串」,而非並是「字元」
所以我才會需要把char x[] or char *x 轉成string類別
strchr or strrchr好像都是找單一字元,所以讓我很困擾~

而且因為資料量進來的時候非常之大,大概3分鐘就2GB~~~
所以我必須僅可能的不要使用copy的方式來處理資料
所以很痛苦~~~
我本來也沒用String,所以常常會用到memcmp、strtok、stcpn但就是覺得不好用呀~~~
我就是想在一長串的資料中找特定字串呀~~~QQ
發表人: oislone    時間: 2009-10-28 07:38 PM

那就用 strstr() 就可以了吧~
發表人: Ailio    時間: 2009-10-29 01:09 PM

其實很多東西都這樣吧

真正上去用 才發現 學校學的 跟 實際用的 搭不上邊

不過程式這種東西 只要腦袋轉的過 邏輯不要差

剩的就是磨練而已 熟能生巧

C/C++ 也非我的領域 就不獻醜了
發表人: 海狼    時間: 2009-12-17 09:38 PM

目前我正在用linux的系統程式
這也讓我有種...學的很少的感覺
code裡面會用到C++ & linux
外加上FLTK這種UI
底層用C 有時要看
除了這個
還有CHIP原本提供的函數...
關鍵字多到...不知道到要去哪裡查





歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0