我正在開發一個程式,我需要在其中為 3 個數字添加前導零
所以代碼看起來像這樣
#include <iostream>
using namespace std;
// Check Examples
//Compiler version g 6.3.0
int main()
{
long int num =5;
char CNum[10];
sprintf(CNum,"ld",num) ;
std::cout << CNum;
return 0;
}
// Outputs 005
現在讓我們定義一個名為的整數變數中前導零的數量
int blank = 3
之后的代碼應該是這樣的
#include <iostream>
using namespace std;
// Check Examples
//Compiler version g 6.3.0
int main()
{
int blank = 3;
long int num =5;
char CNum[10];
sprintf(CNum,"ld",num) ;
std::cout << CNum;
return 0;
}
然后我像這樣編輯了 sprintf 引數
sprintf(CNum,"%0%dld",blank,num);
這輸出
%dld
代替
005
現在,我的主要問題是,
我可以在 sprintf 中添加這樣的用戶變數定義的前導零嗎?
如果是,我怎樣才能讓我的代碼做到這一點?
如果否,是否還有其他方法可以執行相同的操作以獲得所需的輸出?
謝謝,期待您的熱情回復...
uj5u.com熱心網友回復:
一種簡單的方法是在運行時構建自己的格式字串,例如:
#include <iostream>
#include <string>
int main ()
{
long int num = 5;
int n_zeroes = 3;
std::string fmt = "%0" std::to_string (n_zeroes) "ld";
char CNum [10];
sprintf (CNum, fmt.c_str (), num) ;
std::cout << CNum;
}
現場演示
uj5u.com熱心網友回復:
為了使寬度動態(不是在格式字串中硬編碼),你可以這樣寫:
sprintf(CNum,"%0*ld",blank,num);
代替硬編碼的寬度3作為在"ld"中,星號表示,下一個引數(該引數的型別必須是int)被取為寬度。
uj5u.com熱心網友回復:
嘗試理解以下代碼 - 它將解決您的問題:
#include <iostream>
#include <string.h>
using namespace std;
// Check Examples
//Compiler version g 6.3.0
int main()
{
int blank = 3;
long int num =5;
unsigned int i = 0;
char blankZeros[16];
char numStr[16];
char CNum[16];
sprintf(numStr,"%ld",num);
for (i = 0; i < blank - strlen(numStr); i )
blankZeros[i] = '0'; // adding a zero
blankZeros[i ] = '\0'; // end of string sign
sprintf(CNum,"%s%s",blankZeros, numStr) ;
std::cout << CNum;
return 0;
}
uj5u.com熱心網友回復:
- 如果否,是否還有其他方法可以執行相同的操作以獲得所需的輸出?
如果您cout無論如何都要輸出結果,您可以直接在那里進行格式化:
std::cout << std::setfill('0') << std::setw(blank) << num;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386145.html
上一篇:C 中的記憶體分配
