C++ std::atol サンプルコード集: 文字列を数値に変換する様々な方法

2024-04-02

C++ の Strings と std::atol

std::atol は、cstdlib ヘッダーファイルで定義されている関数です。以下のプロトタイプを持ちます。

long long int std::atol(const char* str);
  • str: 変換対象となる文字列へのポインタ

この関数は、str が指す文字列を解析し、long long int 型の整数に変換して返します。文字列の先頭から、空白文字(isspace で判定される文字)を無視し、最初の非空白文字から解析を開始します。

std::atol の使い方は以下の通りです。

#include <cstdlib>

int main() {
  char str[] = "12345";
  long long int num = std::atol(str);

  // num は 12345 になる
  printf("%lld\n", num);

  return 0;
}

この例では、str という文字列を std::atol で解析し、long long int 型の整数に変換して num に格納しています。

  • std::atol は、文字列の先頭から最初の非空白文字までを解析します。そのため、文字列の先頭に空白文字が含まれている場合は、その文字列は無視されます。
  • std::atol は、文字列を解析する際に、有効な数値以外が含まれている場合は、不正な値を返します。
  • std::atol は、long long int 型の整数に変換できない場合は、0 を返します。

その他

std::atol 以外にも、文字列を数値に変換する関数として、std::atoistd::stol などがあります。これらの関数は、それぞれ異なる型への変換に対応しています。

  • std::atoi: int 型への変換
  • std::stol: long 型への変換

詳細については、C++ の標準ライブラリのリファレンスを参照してください。

まとめ

std::atol は、C++ における Strings と密接に関連する関数であり、文字列データを数値に変換する必要がある場面でよく使用されます。この関数を理解することで、C++ プログラミングにおける文字列処理の幅が広がります。



C++ std::atol サンプルコード

文字列を整数に変換する

#include <cstdlib>
#include <iostream>

int main() {
  char str[] = "12345";
  long long int num = std::atol(str);

  std::cout << "str: " << str << std::endl;
  std::cout << "num: " << num << std::endl;

  return 0;
}

文字列の先頭に空白文字がある場合

#include <cstdlib>
#include <iostream>

int main() {
  char str[] = "  12345";
  long long int num = std::atol(str);

  std::cout << "str: " << str << std::endl;
  std::cout << "num: " << num << std::endl;

  return 0;
}

文字列に不正な値が含まれている場合

#include <cstdlib>
#include <iostream>

int main() {
  char str[] = "12345abc";
  long long int num = std::atol(str);

  std::cout << "str: " << str << std::endl;
  std::cout << "num: " << num << std::endl;

  return 0;
}

文字列を別の型に変換する

#include <cstdlib>
#include <iostream>

int main() {
  char str[] = "12345";
  int num1 = std::atoi(str);
  long num2 = std::atol(str);

  std::cout << "str: " << str << std::endl;
  std::cout << "num1 (int): " << num1 << std::endl;
  std::cout << "num2 (long): " << num2 << std::endl;

  return 0;
}


C++ で文字列を数値に変換する他の方法

ストリーム操作

std::stringstream を使用して、文字列をストリームに変換し、そのストリームから数値を読み込む方法があります。

#include <sstream>
#include <iostream>

int main() {
  std::string str = "12345";
  int num;

  std::stringstream ss(str);
  ss >> num;

  std::cout << "str: " << str << std::endl;
  std::cout << "num: " << num << std::endl;

  return 0;
}

手動による変換

単純なケースでは、文字列を1文字ずつ解析し、手動で数値に変換することもできます。

#include <iostream>

int main() {
  std::string str = "12345";
  int num = 0;

  for (char c : str) {
    num = num * 10 + (c - '0');
  }

  std::cout << "str: " << str << std::endl;
  std::cout << "num: " << num << stdendl;

  return 0;
}

ライブラリの使用

Boost C++ Libraries などのライブラリには、文字列を数値に変換する関数などが提供されています。

#include <boost/lexical_cast.hpp>
#include <iostream>

int main() {
  std::string str = "12345";
  int num = boost::lexical_cast<int>(str);

  std::cout << "str: " << str << std::endl;
  std::cout << "num: " << num << std::endl;

  return 0;
}

どの方法を使うべきか

  • 速度が重要な場合は、手動による変換が最も効率的です。
  • 汎用性が必要な場合は、std::stringstreamstd::atol などの標準ライブラリの関数がおすすめです。
  • より高度な機能が必要な場合は、Boost C++ Libraries などのライブラリを使用することができます。



はじめてのstd::basic_string::begin関数: C++のStringクラスの先頭へのアクセス

std::basic_stringクラスは、文字列の格納と操作を行うためのテンプレートクラスです。このクラスは、様々な文字型に対応できる汎用的な設計になっています。std::basic_string::begin関数は、std::basic_stringクラスのメンバー関数であり、以下の役割を果たします。



C++ の Strings における std::basic_string::resize の詳細解説

この解説では、以下の内容を詳細に説明します:std::basic_string::resize の概要: 機能 引数 戻り値 例機能引数戻り値例メモリ管理: 文字列の拡張と縮小 デフォルト初期化 明示的な初期化文字列の拡張と縮小デフォルト初期化


C++の標準ライブラリで文字列を比較する:std::basic_string::compareの解説

std::basic_string::compare は、C++ の標準ライブラリに含まれる std::basic_string クラスのメンバー関数であり、2 つの文字列を比較するために使用されます。比較結果は、負の値、0、正の値のいずれかになります。


std::basic_string::append のサンプルコード

使い方std::basic_string::append の使い方は、以下のとおりです。上記のように、append メソッドに文字列を渡すことで、その文字列を末尾に追加することができます。その他の機能std::basic_string::append は、文字列だけでなく、さまざまな種類のデータを追加することができます。


C++の標準ライブラリ「std::basic_string::assign」を徹底解説!文字列操作をマスターしよう!

文字列の割り当て最も基本的な使用方法として、std::basic_string::assign は、別の std::basic_string オブジェクトの内容を割り当てることができます。この例では、str1 に str2 の内容である "World" が割り当てられます。



C++ストリングクラスにおけるstd::basic_string::find_first_not_of関数:詳細解説とサンプルコード

std::basic_string::find_first_not_of関数は、指定された文字列または文字範囲内で、最初の除外文字が現れる位置を検索します。除外文字とは、検索対象文字列に含まれていない文字のことです。詳細解説関数宣言引数s: 除外文字列または文字範囲の先頭ポインタ


std::basic_string::dataを使いこなして、C++プログラミングをもっと楽しく!

概要std::basic_string::data は、std::basic_string オブジェクト内の文字列データへのポインタを返します。返されたポインタは、const であり、文字列データの変更はできません。返されたポインタは、std::basic_string オブジェクトの生存期間中は有効です。


C++ プログラマー必見: 推論ガイドによる std::basic_string の使いこなし

C++20 では、std::basic_string クラスのための推論ガイドが導入されました。これは、コンパイラがテンプレート引数を自動的に推論し、コードをより簡潔に記述できる機能です。推論ガイドとは?推論ガイドは、テンプレート引数を明示的に指定しなくても、コンパイラがテンプレート引数を自動的に推論できる仕組みです。これは、コードの冗長性を減らし、可読性を向上させるのに役立ちます。


C++の「std::wcstoimax」でワイド文字列を整数に変換:詳細解説とサンプルコード

概要std::wcstoimax は、C++ の標準ライブラリに含まれる関数で、ワイド文字列 (wstring) を指定した基数に基づいて整数値に変換します。これは、std::stoi() 関数のワイド文字列バージョンと考えることができます。


C++ の文字列操作:std::basic_string の演算子徹底解説

+ 演算子 を使って、2つの文字列を連結することができます。==, !=, <, >, <=, >= 演算子を使って、2つの文字列を比較することができます。比較は、文字列の各文字コードを比較して行われます。+= 演算子 を使って、文字列に文字を追加することができます。