C++の基礎 - 変数
ナビゲーションに移動
検索に移動
概要
数値の桁数
std::to_string関数およびstd::string::sizeメソッドの使用
数値の桁数を数える最も簡単な方法は、数値をstd::string
オブジェクトに変換した後、std::string
のsize
メソッドを呼び出して桁数を取得することである。
以下の例では、整数を文字列に変換した後、文字列のサイズを整数として取得している。
ただし、符号記号もカウントするため、負の整数に対して誤った数値が出力されるため、負の整数には使用できない。
#include <iostream>
#include <vector>
#include <string>
template<typename T>
size_t countDigits(T n)
{
std::string tmp = std::to_string(n);
return tmp.size();
}
int main()
{
int num1 = 1234567;
int num2 = -1234567;
std::cout << "number of digits in " << num1 << " = " << countDigits(num1) << std::endl;
std::cout << "number of digits in " << num2 << " = " << countDigits(num2) << std::endl;
exit(EXIT_SUCCESS);
}
// 出力例 number of digits in 1234567 = 7 number of digits in -1234567 = 8
以下の例では、上記の処理に加えて、負の整数の場合は文字列のサイズを1減算している。
#include <iostream>
#include <vector>
#include <string>
template<typename T>
size_t countDigits(T n)
{
std::string tmp = std::to_string(n);
if (n < 0)
{
return tmp.size() - 1;
}
return tmp.size();
}
int main()
{
int num1 = 1234567;
int num2 = -1234567;
std::cout << "number of digits in " << num1 << " = " << countDigits(num1) << std::endl;
std::cout << "number of digits in " << num2 << " = " << countDigits(num2) << std::endl;
exit(EXIT_SUCCESS);
}
// 出力例 number of digits in 1234567 = 7 number of digits in -1234567 = 7
std::string::eraseメソッドおよびstd::remove_if関数の使用
std::string::erase
メソッドおよびstd::remove_if
関数を使用して、数字以外の記号を削除することができる。
ただし、以下の例では、浮動小数点が処理できないことに注意する。
#include <iostream>
#include <vector>
#include <string>
template<typename T>
size_t countDigits(T n)
{
std::string tmp = std::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;
std::cout << "number of digits in " << num1 << " = " << countDigits(num1) << std::endl;
std::cout << "number of digits in " << num2 << " = " << countDigits(num2) << std::endl;
exit(EXIT_SUCCESS);
}
// 出力例 number of digits in 1234567 = 7 number of digits in -1234567 = 7