簡體   English   中英

在空格上使用std :: stringstream轉換為字符串失敗

[英]conversion to string with std::stringstream fails on white spaces

我想任何字符串或字符或數字轉換std::stringstd::stringstream 這就是我在做什么:

template<typename T>
std::string toString(T a){
    std::string s;
    std::stringstream ss;
    ss <<a;
    ss >>s;
    return s;
    }

int main(int argc, char* argv[]) {
    char s[100]="I am a string with spaces";
    std::cout<<toString(s);

    return 0;
} 

但是它在第一個空白處失敗。

輸出:

I

預期的輸出:

I am a string with spaces

我怎樣才能做到這一點。

注意: s也可以包含換行符。

您可以使用std::ostringstream::str()成員函數直接訪問流的字符串化內容。

template <typename T>
std::string toString(const T& a)
{
    std::ostringstream ss;
    //   ↑
    ss << a;
    return ss.str();
    //     ~~~~~~~^
}

DEMO

operator<<s插入字符串流沒有問題。 這與您執行std::cout << s沒什么不同。 您做錯了什么是從流中提取到s 這只會讀取最多一個空格字符(包括空格和換行符。)要獲取流的內容,請執行以下操作:

return ss.str();

但是,這只是一種復雜的操作方式:

std::string str = s;

只需將整個程序減少10行即可:

#include <iostream>

int main(int argc, char* argv[]) {
    char s[100]="I am a string with spaces";
    std::cout<<std::string(s);

    return 0;
} 

如果您確實需要使用stringstream,那么有一種可能的解決方案:(我不假裝有好的代碼)

template<typename T>
std::string toString(T a) {
    std::stringstream ss;
    ss << a;
    const char* s = ss.str().c_str();
    ss.read((char *)s, ss.str().length());
    return s;
}

暫無
暫無

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

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