C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で文字列から先頭の余分なゼロを削除する方法

この記事では、C++を使って文字列から先頭の余分なゼロ(先行ゼロ)を削除する方法を解説します。扱うデータによっては、文字列が「00023054」のように先頭に複数のゼロを含んでいることがあります。ここで紹介するプログラムを実行すると、出力は「23054」となり、先頭の不要なゼロだけが取り除かれます。

入力:先頭にゼロを含む文字列「000023500124」
出力:「23500124」

アルゴリズム

処理の流れは以下の通りです。

ステップ1:文字列を取得する
ステップ2:先頭に並ぶゼロの個数 n を数える
ステップ3:文字列の先頭から n 文字を削除する
ステップ4:残りの文字列を返す

サンプルコード

#include<iostream>
#include<string>
using namespace std;

int main() {
    string my_str = "000023500124";
    int num = 0;

    cout << "Number with Leading Zeros : " << my_str << endl;

    // 文字列の先頭にあるゼロの個数を数える
    while (num < my_str.size() && my_str[num] == '0') {
        num++;
    }

    my_str.erase(0, num); // 先頭(インデックス0)から num 文字を削除

    cout << "Number without Leading Zeros : " << my_str << endl;

    return 0;
}

実行結果

Number with Leading Zeros : 000023500124
Number without Leading Zeros : 23500124

コードのポイント

ゼロの個数を数える処理

while文を使い、文字列の先頭から順に1文字ずつ確認し、その文字が'0'である限りカウンタ変数 num を増やしていきます。なお、すべての文字がゼロの文字列が渡された場合に備えて、num が文字列の長さを超えないという条件も併せて判定しておくと、範囲外アクセスを防げて安全です。

erase関数による削除

stringクラスのeraseメンバ関数は、第1引数に開始位置(インデックス)、第2引数に削除する文字数を指定します。ここでは erase(0, num) と呼び出すことで、先頭のゼロをまとめて削除しています。

この手法は、数値として意味のある桁だけを残したい場合などに便利です。また、逆に末尾側の余分なゼロ(小数点以下の後続ゼロなど)を削除したい場合は、文字列を後ろから走査して同じくerase関数を使うことで同様に対応できます。


  1. C++で文字列から二分木を構築する方法

    括弧と整数から構成される文字列が与えられたとき、その文字列から二分木を構築する問題を考えてみましょう。入力文字列全体が一つの二分木を表しており、整数の後に0個、1個、または2組の括弧が続く形式になっています。整数はルート(根)ノードの値を表し、各括弧のペアは同じ構造を持つ子の部分木を含んでいます。問題の例例えば、入力が 4(2(3)(1))(6(5)) のような文字列だった場合、出力は [3,2,1,4,5,6](中順走査・inorder traversal の結果)となります。解決アプローチこの問題を解くために、以下の手順に従います。再帰関数 solve() を定義します。引数として文字列

  2. Pythonで文字列の末尾にゼロを追加する方法

    データ処理を行っていると、ある文字列の後ろに別の文字列を連結したい場面に出くわすことがあります。本記事では、指定した文字列の末尾に動的な個数の「0」を追加する方法を、いくつかの文字列操作機能を使ったサンプルコードとともにわかりやすく解説します。 ljust()とlen()を使う方法 Pythonの文字列メソッドljust()は、指定した幅(width)の文字列の中で元の文字列を左寄せにして返します。余った部分は引数で指定した埋め込み文字(fillchar)で埋められます(デフォルトは半角スペース)。また、len()は文字列の長さを返す関数です。この2つを組み合わせ、「元の文字列の長さ+追加した