2010-03-21 52 views
10

建議在C++中使用cstdio,cstring,cmath嗎? 我正在編寫一個需要pow,strlen和sprintf的程序......爲此我唯一能做的就是包含這3個頭文件。有沒有更好的C++方法來做到這一點?是否推薦在C++中使用cstdio,cstring,cmath等?

感謝

+1

聽起來像你寫C,只是使用C++編譯器。如果您使用的是C++,那麼我認爲您應該使用標準庫的IO操縱功能以及stringstream而不是sprintf,並使用C++字符串類而不是C風格的字符串。你「需要」strlen()和sprintf(),因爲你正在處理C字符串。 – 2010-03-21 22:34:21

回答

5

的正確方法。

+0

不知道我同意這個:)聽起來好像他在處理C風格的字符串,而不是C++字符串。我想問的是:他不應該使用std :: basic_string 而不是NULL結尾的字符串以及C++而不是sprintf的IO操作特性?歡呼聲:) – 2010-03-21 22:33:01

10

您可以使用std::stringstream而不是sprintfstd::string而不是C風格的字符串。但是C++只是使用C庫來實現數學函數。

C++增加了對數學函數的一些方便的重載(例如,你可以使用浮動EXP()。)他們提供< math.h中>不僅在<CMATH>雖然。

+0

除了sprintf在string.h中還有很多有用的東西 – 2010-03-21 22:12:27

+2

但它都是使用char *字符串。如果你切換到C++的字符串類,你可以把它全部放在字符串頭部。 (O.K.,有時你也可能需要算法) 如果可能的話,最好使用C++的字符串而不是char *。 – Shiroko 2010-03-21 22:44:22

+0

string.h也有一些非字符串函數,例如memcpy和memset。 – dan04 2010-03-22 00:17:55

3

對於數學函數,<cmath>是正確的方法;但是,對於I/O,您應該使用<iostream>,<sstream>,<fstream>和朋友。對於字符串操作,<字符串>是要走的路。

+0

iostream比scanf/printf慢得多(acm奧林匹克體驗) – osgx 2010-03-22 00:26:09

+0

@osgx,不知道我買了那個。 scanf/printf必須處理比iostream更多的格式。你使用了哪個實現? iostream的任何合理實現應該至少一樣快。 – 2010-03-22 07:41:05

+0

對我們的奧林巴斯問題是'sync_with_stdio'。 gcc的libstdC++的iostream在Linux中啓用了此功能。關閉後,iostream的速度增加 – osgx 2010-03-22 10:32:58

1

cmath在C++中並沒有被真正取代,因爲沒有什麼可以讓它們變得更好。然而,stringstreams/iostreams遠遠優於cstring和cstdio。

如果你有一個C字符串,你可以很容易地轉換爲一個std ::字符串,並再次回來。如果你使用字符串,總是使用C++字符串庫超過strlen,sprintf和。

相關問題