C++の基礎 - 変数

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2021年11月14日 (日) 09:34時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <br><br> == 数値の桁数 == ==== std::to_string関数およびstd::string::sizeメソッドの使用 ==== 数値の桁数を数える最も簡単な方…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要



数値の桁数

std::to_string関数およびstd::string::sizeメソッドの使用

数値の桁数を数える最も簡単な方法は、数値をstd::stringオブジェクトに変換した後、std::stringsizeメソッドを呼び出して桁数を取得することである。

以下の例では、整数を文字列に変換した後、文字列のサイズを整数として取得している。
ただし、符号記号もカウントするため、負の整数に対して誤った数値が出力されるため、負の整数には使用できない。

 #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