[英]How to check length of string and return a value with leading zero's
問題是如何檢查字符串filenum的長度,此字符串將更改,例如,它可能為'1',如何將4個前導零加到'1'上,從而使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");
}
}
如果您想使用CString
類(因為您的帖子似乎標有"visual-c++"
並且您似乎已經在代碼中使用了CString
也許在Win32層邊界),則可以使用CString::Format()
方法 。
特別是,您可以傳遞%05d
字符串格式說明符,這意味着您需要5位填充:
int n = 1; // or whatever...
CString paddedNum;
paddedNum.Format(L"%05d", n);
// paddedNum contains "00001"
然后,您只需使用CString的operator+
即可建立完整的路徑/文件名,以連接多個子字符串。
或者,您仍然可以使用CString::Format()
,為完整路徑/文件名指定更復雜的字符串格式。
您可以對CString::Format()
使用printf()
格式規范語法 。
可以很容易地用例如std::ostringstream
和常規流操縱器來完成 :
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
您試圖調用一個不存在的std::string
構造函數。 您要調用的構造函數期望將單個char
作為輸入,但是您正在向其傳遞char*
字符串文字。 同樣,您的if
語句無論如何都是錯誤的,並且會導致過度殺傷。 if
要處理所有情況,則只需要1。 而且,您甚至沒有使用要創建的filenums
變量,而應該將填充添加到filenum
本身。
嘗試這個:
std::string filenum = m_csFileName;
if (filenum.length() < 5)
filenum = std::string(5 - filenum.length(), '0') + filenum;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.