#
question : i love u ->u love i
analysis:
主要思想是 首先整體逆置句子,然后再尋找句子中每個(gè)單詞 做逆置。
需要分析的是: 單詞的定義?空格如何處理?標(biāo)點(diǎn)符號(hào)?
需要注意的地方就是:在需要知道單詞的結(jié)尾的時(shí)候,需要對(duì)字符串最后一個(gè)字符進(jìn)行判斷,如果仍然處于單詞中,這個(gè)時(shí)候仍然要結(jié)束這個(gè)單詞,去逆置
?1
void?reverse(char?*s,int?start,int?end)
?2

{?
?3
???if(s?==?null?||?start?>?end?)
?4
???????return;
?5
???for(int?i?=?start,j?=?end;?i?<?j;i++,j--)
?6
????
{
?7
??????char?temp?=?s[i];s[i]?=?s[j];s[j]?=?temp;
?8
??????}
?9
}
10
?1
void?reverse_word(char?*s)
?2

{
?3
??if(s?==?null)
?4
????return;
?5
??int?len?=?strlen(s);
?6
??reverse(s,0,len-1);
?7
??
?8
??int?flag?=?0;//?word?doesnot?begin
?9
??int?i?=?0,start?=?0,end?=?0;
10
??while(s[i]?!=?'\0')
11
??
{
12
?????if(isalpha(s[i])?&&?flag?==?0)
13
?????
{
14
????????start?=?i;
15
????????flag?=?1;
16
?????}
17
?????else?if(flag?==?1?&&?!isalpha(s[i]))
18
????
{
19
??????end?=?i-1;
20
??????reverse(s,start,end);
21
??????flag?=?0;??
22
?????}
23
?????else?if(flag?==?1?&&?s[i+1]?==?'\0')
24
?????
{
25
?????????if(isalpha(s[i]))
26
???????????end?=?i;
27
????????else?
28
????????????end?=?i-1;
29
????????reverse(s,start,end);???
30
???}
31
???i++;
32
???}
33
34
}
35
sizeof(class)總結(jié)下:
如果class為空,那么sizeof(class)=1;
如果class 內(nèi)有虛函數(shù),則要加上一個(gè)指針大小
當(dāng)然class的data member也是要加上的。。。。
轉(zhuǎn)載水木
誤解:inline函數(shù)沒有單獨(dú)的函數(shù)體,也不能取地址。
inline修飾并不會(huì)改變函數(shù)的通常語義,仍可通過函數(shù)指針調(diào)用:
inline?void?f()?{}
void?g()?{
??void?(*p)()?=?f;
??p();
}
------------------------------------------------------------------------
誤解:inline一定導(dǎo)致代碼膨脹
class?Foo?{
public:
????????int?Bar()?{?return?foo;?}
private:
????????int?foo;
};
這樣的Foo::Bar?inline會(huì)讓binary變小
------------------------------------------------------------------------
誤解:?inline函數(shù)一定是internal?linkage/no?linkage的。
inline與函數(shù)的linkage無關(guān)。inline函數(shù)同樣可以用static和extern修飾,并具
備同一般函數(shù)相同的linkage。標(biāo)準(zhǔn)要求external?linkage的inline函數(shù)在所有編
譯單元中具有相同的地址。external?linkage的inline函數(shù)內(nèi)定義的靜態(tài)變量同
樣應(yīng)在所有編譯單元中表現(xiàn)為單一對(duì)象,具有相同的地址。
------------------------------------------------------------------------
誤解:?如果inline函數(shù)包含循環(huán)/調(diào)用了其他函數(shù)/遞歸調(diào)用自己,編譯器就無法
??????將其展開。
某些早期的編譯器有這類限制,但對(duì)現(xiàn)代編譯器來說它們不再是inline展開的障
礙了。
[insert?RoachCock's?example?here]
------------------------------------------------------------------------
誤解:inline和virtual不能同時(shí)修飾一個(gè)函數(shù)。
inline和virtual并不沖突。以下程序編譯通過。
#include?<iostream>
struct?A
{
??inline?virtual?void?f()
??{
????std::cout?<<?"inline?virtual"?<<?std::endl;
??}
};
------------------------------------------------------------------------
誤解:virtual函數(shù)即使聲明為inline,由于是late?binding,無法判斷實(shí)際
??????調(diào)用的版本,編譯器也無法展開。
虛函數(shù)調(diào)用并不總是late?binding。
示例:
struct?Base
{
??virtual?void?foo(){cout?<<?"Base::foo"?<<?endl;}
};
struct?Derived?:?Base
{
??void?foo(){cout?<<?"Derived::foo"?<<?endl;}
};
void?bar(Base&?b)
{
??b.foo();??//?late?binding.?if?b?is?a?Derived,?call?Derived::foo
??b.Base::foo();??//?early?binding.?inline
??Derived?d;
??d.foo();??//?early?binding.?inline
}
另外,盡管在您的編譯器中很可能還沒有實(shí)現(xiàn),但即使late?binding理論上也是
可以展開的。
????? 從2006年6月1號(hào)在無錫南禪市買了《essential c++》之后,發(fā)誓要堅(jiān)持把它給學(xué)下去,盡管我每天都在上班,但是我還是利用車上時(shí)間,公司少量時(shí)間,和晚上的時(shí)間,把這本書看完了,自我感覺功力大增,C語言的功底給了我很大的幫助,我不停地上機(jī)實(shí)踐,發(fā)現(xiàn)問題,解決問題,收獲知識(shí),快速成長,只要自己努力,就一定市可以的。
?? “作為一個(gè)好的學(xué)習(xí)者,背景不是重點(diǎn),重要的是,你是否具備正確的學(xué)習(xí)態(tài)度,起步固然可以從輕松小品開始,但如果碰上大部頭巨著就退避三舍、逃之夭夭,面對(duì)任何技術(shù)只求快餐速成,學(xué)語言從來不寫程序,那就絕對(duì)沒有成為高手乃至專家的一天”
???? 下一個(gè)月的目標(biāo),是重讀effective c++ ,c++編程用法,c++必知必會(huì),最重要的是上機(jī)體會(huì),發(fā)現(xiàn)問題,解決問題,積累知識(shí)。
這幾天沒來這里,并不代表我沒有看C++,我仍然按計(jì)劃在進(jìn)行,也就是今天,我完成了第五章的閱讀,剩下的這兩天,主要是上機(jī)實(shí)踐,這樣周一就可以看第六章,一定要按計(jì)劃在7月份前高質(zhì)量把書看完做完。。。
????? 上篇是我寫的一個(gè)關(guān)于matrix的類,實(shí)現(xiàn)了任意指定行和列,已經(jīng)基本的運(yùn)算“+,-,*”,還有拷貝賦值操作,應(yīng)該可以滿足基本的要求。遇到的問題:
在寫拷貝賦值等函數(shù)的時(shí)候,由于丟掉了 &
matrix&?operator=(const?matrix?&rhs);結(jié)果導(dǎo)致了在析構(gòu)函數(shù)無法正常完成,表現(xiàn)的現(xiàn)象free_dbg這個(gè)地方出問題,再者,還有地址無法訪問,這個(gè)其實(shí)是由于沒有新開空間,我就直接賦值了,所以出現(xiàn)了這個(gè)問題。
?? 在copy assignment operator這個(gè)函數(shù)的時(shí)候,一定要?jiǎng)h除掉原來的空間,然后new一個(gè)空間,再賦值過去。
? 在copy constructor的時(shí)候,只要new一個(gè)就可以了。
這其實(shí)都是對(duì)于class內(nèi)有配置動(dòng)態(tài)內(nèi)存,需要重寫這兩個(gè)函數(shù)。。
matrix(const?matrix?&rhs);
一切還都是計(jì)劃進(jìn)行,第四章還剩下一個(gè)關(guān)于指針函數(shù)的問題,明天搞定,然后18號(hào)就按計(jì)劃進(jìn)入第15章,還是老話:寫程序才能發(fā)現(xiàn)問題