我正在尝试创建一个为我创建文件夹的功能,并使用数字组合命名它们。这是我为函数创建的代码:
void folderMaker(int xCount, int yCount)
{
stringstream ssObject;
string xString;
string yString;
for (int x = 0; x<xCount; x++)
{
for (int y = 0; y<yCount; y++)
{
ssObject << x;
xString = ssObject.str();
ssObject << y;
yString = ssObject.str();
string nameAndLocation = "C:\\User\\DestinationFolder\\" + xString + "and" + yString;
CreateDirectory (nameAndLocation.c_str(), NULL);
}
}
}
我想制作两个&#34; for&#34;循环为x和y变量赋予特定值。从那里我想创建使用名称中包含的这两个变量创建的新文件夹的名称。出于这个原因,我使用我创建的ssObject。结果是我确实做了我想要的文件夹,但名字不是我想要的名字。例如,如果xCount = 3且yCount = 1,我将获得以下文件夹名称:
第一个文件夹的名称:x0andy00
第二个文件夹的名称:x001andy0010
第三个文件夹的名称:x00102andy001020
为什么我得到这些名字(在xCount = 3和yCount = 1的情况下,而不是x0andy0,x1andy0和x2andy0)?我怎样才能得到我想要的正确结果?
答案 0 :(得分:3)
(1) string str() const; (2) void str (const string& s);
第一个表单(1)返回一个字符串对象,其中包含该流的当前内容的副本。
第二种形式(2)将s设置为流的内容,丢弃任何先前的内容。
要清理缓冲区,也要使用第二个重载:
xString = ssObject.str();
ssObject.str("");
// ^^
答案 1 :(得分:2)
因为您一直将数据推送到相同的流。
最简单的方法是为每次转换使用新流,最好是在函数中使用:
std::string ToString(int number)
{
std::ostringstream os; // new stream created
os << number;
return os.str();
}
或者如果你有一个C ++ 11编译器,只需使用std::to_string
。
答案 2 :(得分:0)
为什么不在ssObject中从头开始构造名称?
for (int x = 0; x<xCount; x++)
for (int y = 0; y<yCount; y++) {
stringstream ssObject;
ssObject << "C:\\User\\DestinationFolder\\" << x << "and" << y;
CreateDirectory (ssObject.str().c_str(), NULL);
}
答案 3 :(得分:0)
这应该可以做到!!
void folderMaker(int xCount, int yCount)
{
std::stringstream ssObject;
std::string xString;
std::string yString;
for (int x = 0; x<xCount; x++)
{
for (int y = 0; y<yCount; y++)
{
ssObject << "x" << x;
xString = ssObject.str();
ssObject.str("");
ssObject << "y" << y;
yString = ssObject.str();
ssObject.str("");
std::string nameAndLocation = "C:\\User\\DestinationFolder\\"
+ xString
+ "and" + yString;
CreateDirectory (nameAndLocation.c_str(), NULL);
std::cout << nameAndLocation << std::endl;
}
}
}