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::dataを使いこなして、C++プログラミングをもっと楽しく!

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



std::basic_string_view::find_last_of の使い方:C++で文字列の最後の出現位置を探す

引数: str: 検索対象となる文字列 pos: 検索を開始する位置(省略可能、デフォルトは文字列末尾)str: 検索対象となる文字列pos: 検索を開始する位置(省略可能、デフォルトは文字列末尾)返値: 見つかった場合は、最後の出現位置 見つからない場合は、std::basic_string_view::npos


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

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


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

std::basic_string::erase は、C++ 標準ライブラリ std::string クラスのメンバ関数であり、文字列の一部を削除するために使用されます。この関数は、文字列の長さを短縮し、その内容を変更します。使い方std::basic_string::erase は、以下の3つの方法で呼び出すことができます。


std::basic_string::c_str関数を使いこなしてC++の文字列操作をマスターしよう!

Cスタイルの文字列とは、文字列の最後にヌル文字('\0')が追加された文字列の配列です。C言語では、文字列は基本的にこの形式で扱われます。std::basic_string::c_str関数は、std::basic_stringオブジェクトの内容をCスタイルの文字列に変換し、そのポインタを返します。このポインタは、C言語の文字列関数で使用することができます。



C++ std::basic_string::ends_with 関数徹底解説

std::basic_string::ends_with 関数は、指定された文字列がストリングの末尾に一致するかどうかを検証します。一致する場合は true、一致しない場合は false を返します。構文パラメータsv: 一致させる文字列を表す std::basic_string_view オブジェクト


std::wstring_convertクラス:std::wcsrtombs関数のより安全な代替手段

std::wcsrtombs は、ワイド文字列をマルチバイト文字列に変換する関数です。これは、異なる文字エンコーディングを使用するシステム間で文字列データを交換する必要がある場合に役立ちます。機能std::wcsrtombs は以下の機能を提供します。


std::basic_string_view のサンプルコード

std::basic_string_view は、文字列データへの読み取り専用ビューを提供する軽量なクラスです。std::string オブジェクトや char 配列など、さまざまな文字列データソースを参照することができます。主な特徴:読み取り専用: 文字列内容を変更することはできません。


C++のstd::basic_string::assign関数:初心者向けチュートリアル

この関数は、initializer list を受け取り、その内容を std::string に割り当てます。initializer list は、カンマで区切られた値のリストです。assign 関数は、initializer list 以外にも様々なパラメータを受け取ることができます。


std::wcstol 関数を使いこなして、C++ プログラミングをレベルアップ!

std::wcstol は、以下の引数を受け取ります。str: 変換対象となるワイド文字列へのポインターstr_end: 変換が終了した後の文字列へのポインター (省略可能)base: 数値の基数 (省略時は 10)この関数は、str で指定されたワイド文字列を解析し、指定された基数に基づいて長整型値に変換します。変換が成功すると、変換結果が返されます。変換が失敗した場合、0 が返されます。