說穿了,我們前面都還只是把東西存到一個暫存空間裡(buffer),為了讓資料變成有用的資訊,更容易被我們所使用的演算法給利用,因此我們繼續來建構他的資料結構。
依照前篇所敘,我們將輸入的檔案存到一個暫存的表格當中,方便我們使用,而在使用這表格內的資訊時,我們必須先做一些基本的歸類,並且透過輸入的字串去判別歸類的方式,因此,我們開始研究一下我們的資料內容(Data),並且研判重要的關鍵字,讓他變成我們程式中的一部分;利用字串比較(strcmp)可以達成這樣的工作。
一段關於字串比較的敘述是長這樣的。
strcmp(const char *str1, const char *str2)
/* 相等傳回0,小於傳回負數,大於傳回正數 */
注意的是,使用這個函式,我們必須在標頭檔處多寫入一行。
#include <cstring>
就可以繼續來玩弄這個小玩意兒了(大誤)
玩弄這小玩意兒之前,要先搞清楚我們最常犯的錯誤…
例如:
string test1= “Hello”;
string test2= “World”;
int k = 2;
k = strcmp(test1, test2);
然後,很Happy的來編譯一下,馬上就被編譯器大罵「你這個白癡!」
對,我就是那個白癡!╮(﹀_﹀”)╭
人家說明清清楚楚血淋淋的寫著”const char*”,我還硬要給人家塞string,二話不說一點面子都不給我> <
(這裡保留一個疑問,Q:為什麼許多cstring的可用函式,都指定必須要constr char* 型別呢?)
因此,應該要這麼修改。
const char* test1= “Hello”;
const char* test2= “World”;
int k = 2;
k = strcmp(test1, test2);
編譯器就會摸摸妳的頭說,對對的,就是這樣,然後告訴你說,k = -1了。
因此藉由k的值,我們來決定我們要做的事吧!因為我們的關鍵字需要完全相符,所以只考慮k = 0的狀況。
我們在寫入幾行囉!問題不用想的太複雜,用if-else就可以了。
if( k == 0 ){
//do something!!!
}
else {
//do something!!!
}
這就是為什麼初始值,我不想給k=0的原因了。
因此,咱們運作的邏輯是這樣的,可能有更好的方式,但是小的還沒想到。
(1) 先將一堆字串扔進一個暫存的空間中,例如一個表格。
(2) 再透過字串比較進行分類
(3) 建出適合使用的資料結構
(4) 計算總結出必要資訊~~
以上~~~~目前只做到第(2)步喔!
冏rz 最近太多事情煩心,有點煩躁,所以先寫到這裡了~>”<~
不用怕斷層,那早就植根在你血液裡,等你呼喚。
放空休養 ing. 只能偶爾路過,
跟自閉症作戰不好受還是要和它談談,
畢竟那是我人格轉折的一部份。
Primer 看英文的,侯老大中文造詣太好,
也可能是我努力不夠,讀兩三次還是不懂他講什麼。
source code 寄來我信箱好了,我去翻原文看原作的概念,
再用生活化的角度跟你說
版主回覆:(11/08/2011 08:08:08 AM)
謝謝你的鼓勵。~>"<~ 沒想到你在自己跟內心奮戰時,還跑來關心我。
希望你也過得很好;我最近也是有一番和心靈恐懼的戰鬥!不過,我想總是會走過去的。
有需要的話,也可以來一起吃個晚餐,雖然可能能陪伴你的時間不多,但是見見老朋友或許會寬心不少。
btw, welcome to java.
版主回覆:(11/08/2011 08:03:18 AM)
我印象中,我大一時學到JAVA是很開心的在用的。XD
不過似乎之後幾乎沒甚麼機會再寫了~那時候喜歡他可以寫出親和力的介面XD
最近朋友介紹了一個網站設計的CASE,這個我從國中開始玩的興趣,沒想到玩起來還是不怎麼生疏,原本還擔心斷層的很久了,結果一下子就上手了,等到手邊的專案完成後,我應該會自組一個設計團隊,包含平面設計、攝影、PHP工程師、FLASH、網站等,接案來玩玩。畢竟能把志同道合的朋友集結在一起做事的感覺很棒,這段時間正好練練C++,把手邊適用於IC實體設計的程式完成,我想過程中我的程式邏輯應該可以進步不少,或許對於之後玩玩自己的興趣有意想不到的幫助。
CPP呢?最近工作主要是在忙甚麼呢?很高興你還來關心我的網誌~
哈哈,不要拿 c 的概念套 OO 來加重自己的不安,物件的運作方式有時很直觀。
const 用意是對 complier 申請「寫入保護令」,限定他罩的 function 比如 int/string..之類的可以取得資料,但不允許改變,只有 const 本身可以對其進行蹂躪、家暴,容不得外人插嘴。
(你可以來我的地盤參觀消費,但不准挑戰我的王道原則)
下面這個是我從網路上看到較不錯的說明。
****
試考慮以下情況
class A {
. ….
void doTest() const
void doTest2();
};
class B {
…..
const A getClassA() {….}
};
int main()
{
B objB;
A objA = objB.getClassA(); // compile error,
const A objA2 = objB.getClassA(); // compile ok
objA2.doTest(); // compile ok
objA2.doTest2(); // compile error
};
以 int 變數接受 回傳 const int function 並不會有什麼問題
但若要接受回傳CONST的類別時, 則必需要以 const 物件來接受
該 const 物件只能使用其 const member function
版主回覆:(10/31/2011 01:57:14 PM)
噗~最近在K侯老大的C++ Primer,順著書本的解說邊寫程式邊讀,才發現自己對物件的概念了解的不夠清楚,甚至有許多的誤解啊!XDDD 看來有很多東西可以跟CPP討教了。
不過最近在TRY侯老大的例子時,到了一個地方卡住了T口"T,親愛的CPP,如果你有C++ Primer第三版的話,可以幫我解決這個問題嗎?我照著書中的例子撰寫程式到現在都可以順利的得到結果,不過在繼承這裡,宣告完我的base class與derived class以後,照理說執行的結果derived class應該是可以套用base class的程序的,可是卻不行T__________T"
我推測可能是建構式(constructor)的問題。
如果你有這本書的話,我指的是p.49那個小程式~
如果你願意幫我看看的話,我把程式碼給你T口T",小的我還在認真的學習繼承的概念啊!
變數前面加const的意義是不是代表之後不會再變動到這個值?
從const function推導來的…@@
哈, 其實C和C++的string一點都不是小東西,
它們都很麻煩…XD
特別是c++裡面又包含原有c的string(cstring) 和 字元陣列(就是char*)
我記得大多都還是建議以後者處理"字串"
以前好像也遇過上面的問題 就直接背起來用了
其實你的用法比較直觀, 而在java裡面就是直接這樣使用string變數
(ex: string test="hi")
當初看到java可以這樣簡單處理惱人的string問題時,
心中真是滿心歡喜 ~~~ 從此愛上了java ~~~XDDD
可惜大多的實作上還是要用C++ XD
好好學吧~~ 以後向妳請教, 哈哈 😀
版主回覆:(10/05/2011 04:10:44 AM)
噗 我還要好好加油啊!開始認真的學c++才發現以前想說拿c的概念套用c++,其實有些是很不智的,因為完全沒把物件導向看在眼裡XD,因為寫C寫習慣,所以我大都也是使用char*為主,這次選用string其實是很瞎的理由,就是我是參考c++ primer那本書的example,練習使用c++的function,然後再將那些簡單的範例改寫成自己需要的功能,因為重新面對害怕的程式,其實有很多部份還不是很有信心,所以,只能且戰且走去修正自己的想法了!
好多人喜歡java喔!不過因為我之前java只學過一點點,大部分的作業都指定用c,久了就越來越生疏了。哈哈~~~說不定我了解java以後,也會愛上他。(偷偷對java告白 <誤> )
至於const的意義的確是不可更動的,但是,為什麼呢?@@"
如果是可以更動會發生什麼樣不可預測的情形呢?
為什麼function要這樣設計呢?