簡體   English   中英

如何檢查字符串的長度並返回以零開頭的值

[英]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.

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