在 C++ 中計算一個數字的位數
-
使用
std::to_string
和std::string::size
函式在 C++ 中對數字中的位數進行計數 -
C++ 中使用
std::string::erase
和std::remove_if
方法對數字進行計數
本文將演示有關如何計算 C++ 數字位數的多種方法。
使用 std::to_string
和 std::string::size
函式在 C++ 中對數字中的位數進行計數
計算數字中位數的最直接方法是將其轉換為 std::string
物件,然後呼叫 std::string
的內建函式以檢索計數數字。在這種情況下,我們實現了一個單獨的模板函式 countDigits
,該函式採用單個引數,該引數假定為整數型別,並以整數形式返回大小。請注意,下面的示例為負整數輸出不正確的數字,因為它也計算符號。
#include <iostream>
#include <vector>
#include <string>
using std::cout; using std::cerr;
using std::endl; using std::string;
using std::to_string;
template<typename T>
size_t countDigits(T n)
{
string tmp;
tmp = to_string(n);
return tmp.size();
}
int main() {
int num1 = 1234567;
int num2 = -1234567;
cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;
exit(EXIT_SUCCESS);
}
輸出:
number of digits in 1234567 = 7
number of digits in -1234567 = 8
為了彌補之前實現函式 countDigits
的缺陷,我們將新增一個 if
語句來評估給定數字是否為負,並返回少一的字串大小。請注意,如果數字大於 0
,則返回字串大小的原始值,如以下示例程式碼中所實現的。
#include <iostream>
#include <vector>
#include <string>
using std::cout; using std::cerr;
using std::endl; using std::string;
using std::to_string;
template<typename T>
size_t countDigits(T n)
{
string tmp;
tmp = to_string(n);
if (n < 0)
return tmp.size() - 1;
return tmp.size();
}
int main() {
int num1 = 1234567;
int num2 = -1234567;
cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;
exit(EXIT_SUCCESS);
}
輸出:
number of digits in 1234567 = 7
number of digits in -1234567 = 7
C++ 中使用 std::string::erase
和 std::remove_if
方法對數字進行計數
前面的示例為上述問題提供了完全足夠的解決方案,但是可以使用 std::string::erase
和 std::remove_if
函式組合對 countDigits
進行過度設計,以刪除所有非數字符號。還要注意,此方法後續可用來實現可與浮點值一起使用的函式。請注意,以下示例程式碼與浮點值不相容。
#include <iostream>
#include <vector>
#include <string>
using std::cout; using std::cerr;
using std::endl; using std::string;
using std::to_string;
template<typename T>
size_t countDigits(T n)
{
string tmp;
tmp = to_string(n);
tmp.erase(std::remove_if(tmp.begin(), tmp.end(), ispunct), tmp.end());
return tmp.size();
}
int main() {
int num1 = 1234567;
int num2 = -1234567;
cout << "number of digits in " << num1 << " = " << countDigits(num1) << endl;
cout << "number of digits in " << num2 << " = " << countDigits(num2) << endl;
exit(EXIT_SUCCESS);
}
輸出:
number of digits in 1234567 = 7
number of digits in -1234567 = 7
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn