在字符串流中放入int时,会插入奇怪的字符

Arm*_*dur 1 c++ stl stringstream

我正在尝试使用stringstreams来获取字符串.我是这样做的:

std::string const DilbertImage::startUrl = "http://tjanster.idg.se/dilbertimages/dil";
std::string const DilbertImage::endUrl = ".gif";

 DilbertImage::DilbertImage(int d)
{
    cal.setDate(d);

    int year, month, date;

    year = cal.getYear();
    month = cal.getMonth();
    date = cal.getNumDate();

    std::stringstream ss;

    ss << year << "/";

    if(month < 10)
    {
        ss << 0;
    }

    ss << month << "/" << "Dilbert - " << cal.getNumDate() << ".gif";

    filePath = ss.str();

    ss.str("");
    ss.clear();

    ss << startUrl << date << endUrl;

    url = ss.str();

    std::cout << url << '\t' << filePath << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我希望得到两个看起来像这样的好字符串:

url: http://tjanster.idg.se/dilbertimages/dil20060720.gif
filePath: /2006/07/Dilbert - 20060720.gif
Run Code Online (Sandbox Code Playgroud)

但是当我把intts放在stringstream中时,它们会以某种方式最终得到空格(或者在它们中间插入一些其他空白字符)当我从控制台窗口粘贴它时,字符显示为*.

他们最终看起来像这样:

url: http://tjanster.idg.se/dilbertimages/dil20*060*720.gif 
filepath: /2*006/07/Dilbert - 20*060*720.gif
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

这是整个项目:http://pastebin.com/20KF2dNL

eca*_*mur 5

"*"角色是千位分隔符.有人一直搞乱你的语言环境.

这可能会解决它:

std::locale::global(std::locale::classic());
Run Code Online (Sandbox Code Playgroud)

如果您只想覆盖numpunctfacet(确定数字格式的方式):

std::locale::global(std::locale().combine<std::numpunct<char>>(std::locale::classic()));
Run Code Online (Sandbox Code Playgroud)

在您的情况下,当您设置瑞典语区域设置时:

std::locale swedish("swedish");
std::locale swedish_with_classic_numpunct = swedish.combine<std::numpunct<char>>(std::locale::classic());
std::locale::global(swedish_with_classic_numpunct);
Run Code Online (Sandbox Code Playgroud)