问题是如何检查我的字符串filenum的长度,这个字符串会改变,例如它可能是'1'我怎么能在'1'上添加4个前导零,使得filenum ='00001'等等让我们说filenum ='21'并添加三个前导零的filenum ='00021'我总是希望文件num的长度为5.此外,在我得到新值之后,我如何将该值用于我的路径。任何帮助将不胜感激!
这是我到目前为止所得到的但是我得到了这个错误(错误C2665:'basic_string< char,struct std :: char_traits,class std :: allocator> :: basic_string
void CJunkView::OnCadkeyButton()
{
CString dbdir15 = "Dir15";
CString dbdir14 = "Dir14";
std::string filenum = m_csFileName;
//CString fileName3 = "15001.prt";
CString dbyear = m_csDatabaseYear;
if(filenum.length() < 1)
{
std::string filenums = std::string(5 - filenum.length(), "0") + filenum;
}
else if(filenum.length() < 2)
{
std::string filenums = std::string(4 - filenum.length(), "0") + filenum;
}
else if(filenum.length() < 3)
{
std::string filenums = std::string(3 - filenum.length(), "0") + filenum;
}
else if(filenum.length() < 4)
{
std::string filenums = std::string(2 - filenum.length(), "0") + filenum;
}
else if(filenum.length() < 5)
{
std::string filenums = std::string(1 - filenum.length(), "0") + filenum;
}
if(m_csDatabaseYear == "15")
{
CString fileToOpen = "\"\\\\CARBDATA\\VOL1\\Docs\\PREFORM\\15T\\" + dbdir15 +"\\" + filenum + "\"";
CString exePath = "\"C:\\CK19\\Ckwin.exe\"";
CString cmd = "start " + exePath + ", " + fileToOpen;
system (cmd.GetBuffer(cmd.GetLength() + 1));
//PrintMessage("File Found 2015");
}
//file not found tell user file not found.
else if(m_csDatabaseYear == "14")
{
CString fileToOpen = "\"\\\\CARBDATA\\VOL1\\Docs\\PREFORM\\14T\\" + dbdir14 +"\\" + filenum + "\"";
CString exePath = "\"C:\\CK19\\Ckwin.exe\"";
CString cmd = "start " + exePath + ", " + fileToOpen;
system (cmd.GetBuffer(cmd.GetLength() + 1));
//PrintMessage("File Found 2015");
}
else
{
PrintMessage("File Not Found");
}
}
答案 0 :(得分:3)
如果您想使用CString
类(因为您的帖子似乎标有"visual-c++"
,并且您似乎已在代码中使用CString
- 可能在Win32层边界处),您可以使用CString::Format()
method。
特别是,你可以传递一个%05d
字符串格式说明符,这意味着你想要一个5位数的填充:
int n = 1; // or whatever...
CString paddedNum;
paddedNum.Format(L"%05d", n);
// paddedNum contains "00001"
然后,您可以使用CString的operator+
来构建完整路径/文件名,以连接多个子字符串。
或者您仍然可以使用CString::Format()
为完整路径/文件名指定更复杂的字符串格式。
您可以将printf()
format specification syntax用于CString::Format()
。
答案 1 :(得分:2)
可以轻松完成,例如std::ostringstream
和正常stream manipulators:
std::ostringstream os;
os << std::setfill('0') << std::setw(5) << filenum;
std::cout << os.str() << '\n'; // Get the string in the stream and output it
如果filenum
是例如"1"
然后上面三行的输出应该是
00001
答案 2 :(得分:1)
您正在尝试调用不存在的std::string
构造函数。您要调用的构造函数需要一个char
作为输入,但您要传递char*
字符串文字。此外,您的if
陈述无论如何都是错误的,并且过度杀伤。您只需要1 if
来处理所有情况。你甚至没有使用你正在创建的filenums
变量,你应该将填充添加到filenum
本身。
试试这个:
std::string filenum = m_csFileName;
if (filenum.length() < 5)
filenum = std::string(5 - filenum.length(), '0') + filenum;