簡體   English   中英

如何使用stringstream作為C ++函數的參數?

[英]How can I use stringstream as a parameter for a c++ function?

我一直在尋找將字符串附加到其他基元的解決方案,但發現stringstream是最簡單的解決方案。 但是,我想簡化流程,所以我想創建一個函數來簡化其使用。 如果您要提出替代的串聯方法,我需要最終結果為char *。 我使用了一個循環(i):

std::stringstream ss;
ss << "test" << i;      
char* name = new char[ss.str().size() + 1];//allocate
strcpy(name, ss.str().c_str());//copy and put (char*)c_str in name

所以輸出是鏈接test1test2test3 ...的東西。這是我可以提出的最合理的解決方案。 我試圖將其放入易於使用的函數中,但遇到了問題。 我想做類似的事情:

char* string_to_pointer( char* dest, std::stringstream* _ss ) {
   char* result = new char[_ss->str().size() + 1];
   strcpy(result, _ss->str().c_str());
   return result;
}

然后,我可以做類似的事情:

std::stringstream ss;
ss << "test" << i;      
char* name = string_to_pointer( name, &ss );

我對C ++還是很陌生,在語法上似乎是正確的用法,但是我遇到了運行時問題,並且歡迎提供解決方案,以解決如何在不使用Boost的情況下使它易於使用的問題。

char* string_to_cstring ( const std::string &_ss )

會更清潔! string_to_cstring(ss.str())

需要返回的C字符串可更改嗎? 因為如果沒有,請在需要的地方使用ss.str().c_str()

或使用:

char* result = new char[ss.str().size() + 1] (); // value initialized
ss.str().copy(result,std::string::npos);

使用std::stringstream::str()函數檢索字符串的內容。

例:

int foo = 42;
double bar = 12.67;

std::stringstream ss;
ss << "foo bar - " << foo << ' ' << bar;

std::string result = ss.str();

如果您不想進一步修改字符串,現在可以簡單地調用result.c_str()來獲取const char* 但是,如果您確實需要可修改的char* ,則必須將字符串的內容復制到cstring:

std::unique_ptr<char[]> cstring = new char[result.size() + 1];
strcpy(cstring.get(), result.c_str());

像這樣的事情呢:

#include <string>
#include <sstream>

class ToString {
  std::ostringstream stream;
public:
  template<typename T>
  inline ToString &operator<<(const T&val) {
    stream << val;
    return *this;
  }

  inline operator std::string() const {
    return stream.str();
  } 
};

您可以像這樣使用它:

std::string str = ToString() << "Test " << 5 << " and " << 4.2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM