2013-08-07 39 views
0

如何創建類似於snprintf的消息(我可以在其中使用通用文本,%d爲整數,並且只需在sprintf連接參數時顯示),以避免串聯? (我需要創建結果字符串像You need more %d coins,此刻我做壞的方式來連接和返回值'You need more' + some_stringified_value + 'coins'在C++中如何創建類似於snprintf的消息並更改消息中的值?

+2

您可以在C++中使用的snprintf爲好,不是嗎? – duDE

+4

[Boost :: Format](http://www.boost.org/doc/libs/1_54_0/libs/format/) – milleniumbug

回答

6

「規範」 C++的方式是使用stringstream,像這樣:

std::string somefunc(int number) 
{ 
    std::stringstream ss; 
    ss << "You need " << number << " more coins"; 
    std::string str = ss.str(); 
    return str; 
} 
1

可以使用snprintf在C++以及:

int snprintf (char * s, size_t n, const char * format, ...); 

例如(從上述鏈接):

/* snprintf example */ 
#include <stdio.h> 

int main() 
{ 
    char buffer [100]; 
    int cx; 

    cx = snprintf (buffer, 100, "The half of %d is %d", 60, 60/2); 

    snprintf (buffer+cx, 100-cx, ", and the half of that is %d.", 60/2/2); 

    puts (buffer); 

    return 0; 
} 

輸出:

The half of 60 is 30, and the half of that is 15. 
+0

@Mgetz我認爲它說printf()而不是snprintf(),我編輯和糾正。他也沒有要求「爲什麼這會是更好的選擇」,因此我沒有提供這樣的答案。 –

+1

「爲什麼它會是一個更好的選擇」就是我,就像我說的那樣,我會對任何一個C++問題的C回答下降,除非這個海報可以提供一個非常好的理由,他們不會與這個問題保持密切關係,並提供答案。 C. – Mgetz

+0

@Mgetz我明白了。但是,我希望你知道,倒退是因爲「這個答案沒有用。」而不是「我的個人意見是我不喜歡答案。」 :P –

相關問題