也許這是一個愚蠢的問題,但是有什麼方法可以將一個布爾值轉換爲一個字符串,使得1變成「true」,0變成「false」?我可以只使用if語句,但很高興知道是否有方法使用語言或標準庫來實現這一點。另外,我是一個學生。 :)將bool轉換爲C++中的文本
回答
有關使用C++語言本身如何?
bool t = true;
bool f = false;
std::cout << std::noboolalpha << t << " == " << std::boolalpha << t << std::endl;
std::cout << std::noboolalpha << f << " == " << std::boolalpha << f << std::endl;
我是C++的完全新手。有人可以向我解釋這是如何工作的嗎? – Chucky 2013-02-20 14:06:56
@Chucky在理解[運算符重載](http://stackoverflow.com/questions/4421706/operator-overloading)之前,您將無法理解這是如何工作的。解釋這種工作方式將遠遠超出這個問題的範圍。您需要將其作爲一個不同的問題發佈,或者查找該問題的現有答案。 [我推薦後者](http://mattgemmell.com/2008/12/08/what-have-you-tried/)。 – anthropomorphic 2013-04-09 11:55:31
我同意宏可能是最合適的。我剛剛颳起了測試用例(相信我,我沒有很好的與C/C++,但是這聽上去很有趣):
#include <stdio.h>
#include <stdarg.h>
#define BOOL_STR(b) (b?"true":"false")
int main (int argc, char const *argv[]) {
bool alpha = true;
printf(BOOL_STR(alpha));
return 0;
}
試試這個宏。任何你想要顯示「true」或false的地方,只需用PRINTBOOL(var)替換它,其中var是你想要的文本的布爾值。
#define PRINTBOOL(x) x?"true":"false"
在該宏中需要一些括號,這可能是爲什麼你得到了downvote。 – postfuturist 2008-10-25 21:45:49
我用三元在一個printf像這樣:
printf("%s\n", b?"true":"false");
如果宏是:
B2S(b) ((b)?"true":"false")
,那麼你需要確保無論你在通過爲'b'
沒有按」沒有任何副作用。不要忘記'b'
的括號,因爲你可能會遇到編譯錯誤。
由於'b'只在宏定義中出現一次,爲什麼要警告副作用? – postfuturist 2008-10-25 21:42:58
如果您決定使用宏(或在未來的項目中使用C),則應在宏擴展中的'b'周圍添加括號(我沒有足夠的點數來編輯其他人的內容):
#define BOOL_STR(b) ((b)?"true":"false")
這是一個defensive programming技術,可以防止隱藏的操作順序錯誤;即,如何評估所有編譯器?
1 == 2 ? "true" : "false"
相比
(1 == 2) ? "true" : "false"
甚至在擁有de 2k代表之前,您實際上可以編輯其他人的內容。它會被審查,但當然你可以。 – SysDragon 2014-08-05 08:49:28
我們在談論C++吧?爲什麼我們仍然在使用宏!?
C++內聯函數給你相同的速度宏,用它避免了問題的類型安全和參數評測(額外的好處是羅德尼和DWJ提及。
inline const char * const BoolToString(bool b)
{
return b ? "true" : "false";
}
除此之外我有其他一些抱怨,特別是與接受的答案:)
// this is used in C, not C++. if you want to use printf, instead include <cstdio>
//#include <stdio.h>
// instead you should use the iostream libs
#include <iostream>
// not only is this a C include, it's totally unnecessary!
//#include <stdarg.h>
// Macros - not type-safe, has side-effects. Use inline functions instead
//#define BOOL_STR(b) (b?"true":"false")
inline const char * const BoolToString(bool b)
{
return b ? "true" : "false";
}
int main (int argc, char const *argv[]) {
bool alpha = true;
// printf? that's C, not C++
//printf(BOOL_STR(alpha));
// use the iostream functionality
std::cout << BoolToString(alpha);
return 0;
}
乾杯:)
@DrPizza:爲了這個簡單的功能,包含一個完整的boost lib?你一定在開玩笑?
耶穌哭了。
好的,你問了C++。不是C.不結帳宏。 C++。
C++有適當的字符串。不C的愚蠢的NTBS廢話。適當的字符串。使用它們!它們在標準的標題字符串中。 #include <字符串>使用它們。沒有更多的strcat/strcpy緩衝區溢出;不再缺少空終止符;沒有更雜亂的手動內存管理;正確計數的字符串與適當的值語義。
C++還能夠將bools轉換爲可讀的表示。我們在前面看到了iostream示例的提示,但它們有點受限制,因爲它們只能將文本發送到控制檯(或使用fstreams,文件)。幸運的是,C++的設計者並不是完全白癡,我們還有iostreams,它們不是由控制檯或文件支持,而是由自動管理的字符串緩衝區支持。他們被稱爲stringstreams。 #include <sstream>得到它們。然後我們可以說:
std::string bool_as_text(bool b)
{
std::stringstream converter;
converter << b;
return converter.str();
}
當然,我們並不是真的想要輸入所有這些。幸運的是,C++還有一個名爲Boost的方便的第三方庫,可以幫助我們解決這個問題。 Boost有一個很好的函數叫做lexical_cast。我們可以這樣使用它:
boost::lexical_cast<std::string>(my_bool)
現在的確可以說,這是比一些宏更高的開銷; stringstreams處理您可能不關心的語言環境,並創建一個動態字符串(使用內存分配),而宏可以產生一個文字字符串,從而避免這種情況。但另一方面,stringstream方法可用於可打印和內部表示之間的大量轉換。你可以向後運行, boost :: lexical_cast <bool>(「true」)做對了,例如。您可以將它們與數字一起使用,實際上也可以使用格式正確的I/O操作符。所以它們非常靈活和有用。
如果畢竟這個分析和基準測試顯示lexical_casts是一個不可接受的瓶頸,當你應該考慮做一些宏觀恐怖時,就是。
這應該是罰款:
const char* bool_cast(const bool b) {
return b ? "true" : "false";
}
但是,如果你想這樣做更多的C++ - ISH:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string bool_cast(const bool b) {
ostringstream ss;
ss << boolalpha << b;
return ss.str();
}
int main() {
cout << bool_cast(true) << "\n";
cout << bool_cast(false) << "\n";
}
只要字符串可以直接作爲字符數組它會被視爲我很難說服std::string
將字符串表示爲C++中的一等公民。
此外,結合分配和有界性似乎對我來說是一個壞主意。
這個帖子很舊,但現在你可以使用std::to_string
將很多變量轉換爲std::string
。
http://en.cppreference.com/w/cpp/string/basic_string/to_string
- 1. 在C/C++中將int轉換爲bool
- 2. C#如何將short []轉換爲bool []?
- 3. C++ 11 basic_istream轉換爲bool
- 4. OCaml:將bool轉換爲/ int
- 5. 將bool轉換爲QString
- 6. 將bool轉換爲int?
- 7. 將bool(false)轉換爲C++中的合法指針嗎?
- 8. 如何安全地將System.Object轉換爲C#中的`bool`?
- 9. SQL [轉換爲bool]
- 10. 實體框架C#轉換INT爲bool
- 11. 將任意類約束`C a`轉換爲`C a Bool`
- 12. 將二進制文件轉換爲C中的文本文件
- 13. 無法將字符串轉換爲Bool
- 14. 幫助將bool轉換爲整數
- 15. 如何將JValue轉換爲bool?
- 16. 如何將類型bool轉換爲System.Windows.Forms.TextBox
- 17. 如何將std :: ostringstream轉換爲bool?
- 18. 將一個Int轉換爲Bool
- 19. 轉換可爲空bool? to bool
- 20. C++,bool轉換總是回退到隱式轉換爲void *?
- 21. 將錢轉換爲PHP中的文本
- 22. 將BLOB轉換爲sql中的文本
- 23. 'bool'不能轉換爲'uint8'
- 24. 將文本轉換爲xml
- 25. 將html轉換爲文本
- 26. 將文本轉換爲PDF
- 27. 將文本轉換爲URL
- 28. 將文本轉換爲Varchar
- 29. 將csv轉換爲文本
- 30. 將文本轉換爲列
異議!本地化呢?爲什麼一種語言本身包含語言特定的文字常量? – valdo 2013-05-28 22:28:38
@valdo - 我非常肯定,對於我正在開展的項目,國際化不是問題。當時,這可能是一個學校項目。 – 2013-06-01 19:20:54