std::stoi、std::stol、std::stoull:詳細解説

2024-04-02

C++の文字列と std::atoll:詳細解説

本解説では、以下の内容を詳細に説明します:

  • std::atoll の概要:
    • 動作
    • ヘッダーファイル
    • 引数
    • 戻り値
  • std::atoll の使用方法:
    • 基本的な例
    • エラー処理
    • 文字列ストリームとの比較
  • std::atoll の利点と欠点:
    • 利点
    • 欠点
  • その他の関連関数:
    • std::stoi
    • std::stol
    • std::stoull

std::atoll の概要

std::atollは、std::string 型の文字列を long long int 型の整数に変換します。文字列の先頭から数字が続く部分を探し、それを数値として解釈します。

1 動作

std::atollは、以下の規則に従って文字列を解析します。

  1. 文字列の先頭から空白文字をスキップします。
  2. 最初の非空白文字が数値でない場合は、エラーが発生します。
  3. 数値文字の連続を見つけ、それを10進数として解釈します。
  4. 数値文字列の後に続く文字は無視されます。

2 型

std::atollは、以下の型を受け取り、返します。

  • 引数:
    • const std::string& str: 変換する文字列への参照
  • 戻り値:
    • long long int: 変換結果

3 ヘッダーファイル

std::atollは、<cstdlib> ヘッダーファイルで定義されています。

#include <cstdlib>

4 引数

std::atollは以下の引数を受け取ります。

  • str: 変換する文字列への参照。

5 戻り値

std::atollは以下の値を返します。

  • 変換に成功した場合は、変換結果の long long int 型の値
  • 変換に失敗した場合は、0

std::atoll の使用方法

1 基本的な例

#include <cstdlib>
#include <iostream>

int main() {
  std::string str = "12345";
  long long int num = std::atoll(str.c_str());
  std::cout << num << std::endl;
  return 0;
}

この例では、"12345" という文字列を long long int 型の 12345 に変換しています。

2 エラー処理

std::atollは、変換に失敗した場合、0 を返します。

#include <cstdlib>
#include <iostream>

int main() {
  std::string str = "abc";
  long long int num = std::atoll(str.c_str());
  if (num == 0) {
    std::cout << "変換に失敗しました" << std::endl;
  } else {
    std::cout << num << std::endl;
  }
  return 0;
}

この例では、"abc" という文字列は数値に変換できないため、変換に失敗し、"変換に失敗しました" と出力されます。

3 文字列ストリームとの比較

std::atollは、文字列ストリームよりも効率的で安全な選択肢となります。

#include <iostream>
#include <sstream>

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

  // 文字列ストリームを使用
  std::stringstream ss(str);
  ss >> num;

  // std::atollを使用
  long long int num2 = std::atoll(str.c_str());

  std::cout << num << std::endl;
  std::cout << num2 << std::endl;
  return 0;
}

この例では、std::stringstreamstd::atoll の両方を使用して "12345" という文字



C++ の文字列と std::atoll:サンプルコード集

目次:

  1. 基本的な使用例
  2. エラー処理
  3. 文字列ストリームとの比較
  4. その他のサンプルコード
  5. 応用例

基本的な使用例

#include <cstdlib>
#include <iostream>

int main() {
  std::string str = "12345";
  long long int num = std::atoll(str.c_str());
  std::cout << num << std::endl;
  return 0;
}

このコードは、"12345" という文字列を long long int 型の 12345 に変換し、出力します。

エラー処理

#include <cstdlib>
#include <iostream>

int main() {
  std::string str = "abc";
  long long int num = std::atoll(str.c_str());
  if (num == 0) {
    std::cout << "変換に失敗しました" << std::endl;
  } else {
    std::cout << num << std::endl;
  }
  return 0;
}

このコードは、"abc" という文字列は数値に変換できないため、変換に失敗し、「変換に失敗しました」と出力します。

文字列ストリームとの比較

#include <iostream>
#include <sstream>

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

  // 文字列ストリームを使用
  std::stringstream ss(str);
  ss >> num;

  // std::atollを使用
  long long int num2 = std::atoll(str.c_str());

  std::cout << num << std::endl;
  std::cout << num2 << std::endl;
  return 0;
}

このコードは、std::stringstream と std::atoll の両方を使用して "12345" という文字列を数値に変換し、比較します。

その他のサンプルコード

  • 16進文字列を10進数に変換する
#include <cstdlib>
#include <iostream>

int main() {
  std::string str = "0x1234";
  long long int num = std::atoll(str.c_str());
  std::cout << num << std::endl;
  return 0;
}
  • 浮動小数点数を文字列に変換する
#include <cstdlib>
#include <iostream>

int main() {
  double num = 3.1415926535;
  std::string str = std::to_string(num);
  std::cout << str << std::endl;
  return 0;
}

応用例

  • ファイル名から数値を取り出す
  • コマンドライン引数を数値に変換する
  • 設定ファイルから数値を読み込む


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

std::atoi

C 言語から存在する関数で、文字列を int 型の整数に変換します。

int num = std::atoi("12345");

std::atoll

C++ 標準ライブラリにある関数で、文字列を long long int 型の整数に変換します。

long long int num = std::atoll("12345");

std::stoi

C++11 で導入された関数で、文字列を int 型の整数に変換します。

int num = std::stoi("12345");

std::stol

C++11 で導入された関数で、文字列を long 型の整数に変換します。

long num = std::stol("12345");

std::stoull

C++11 で導入された関数で、文字列を unsigned long long 型の整数に変換します。

unsigned long long num = std::stoull("12345");

文字列ストリーム

std::stringstream を使って、文字列を数値に変換することもできます。

std::stringstream ss("12345");
int num;
ss >> num;

比較

各方法には、それぞれ利点と欠点があります。

方法利点欠点
std::atoiシンプルで使いやすい古い方法で、C++11 以降では std::stoi の方が推奨される
std::atollint 型よりも大きな範囲の整数を変換できるC++11 より前にしか使えない
std::stoiC++11 以降で使えるstd::atoll よりも変換できる範囲が小さい
std::stolstd::stoi よりも大きな範囲の整数を変換できるstd::atoll よりも新しい
std::stoull符号なしの整数を変換できる符号付きの整数には使えない
文字列ストリームより複雑な処理が可能他の方法より冗長
  • 変換したい数値の範囲
  • 使用している C++ のバージョン
  • 必要な処理の複雑さ



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

std::basic_string::crend は、C++ 標準ライブラリ std::string クラスのメンバー関数であり、逆順イテレータ を返します。このイテレータは、文字列の最後の文字の次を指します。つまり、文字列の逆順の終わり を表します。



Strings ライブラリを使いこなす:主要メソッドとサンプルコード

C++ では、文字列リテラルは二重引用符で囲まれた文字列として表現されます。例えば、 "Hello, world!" は文字列リテラルです。しかし、C 言語の文字列配列とは異なり、C++ では文字列リテラルは直接変更できません。文字列を編集するには、std::string クラスのオブジェクトを作成する必要があります。


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

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


C++ の Strings における std::wcslen 関数の詳細解説

std::wcslen 関数の使い方std::wcslen 関数の使い方は非常に簡単です。以下のコード例のように、取得したいワイド文字列の先頭アドレスを関数に渡すだけです。std::wcslen 関数の詳細引数: str: ワイド文字列の先頭アドレス


C++のStringクラスにおけるstd::basic_string::compare関数

0: 2つの文字列が等しい負の値: 最初の文字列が2番目の文字列よりも小さい正の値: 最初の文字列が2番目の文字列よりも大きいcompare関数の使い方compare関数は、以下の2つの方法で使用できます。2つの文字列を直接比較する文字列の部分文字列を比較する



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

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


C++ Stringsにおけるstd::basic_string_view::rfind

概要std::basic_string_view::rfind は、部分文字列と検索を開始する位置を受け取り、部分文字列が最後に出現する位置を返します。部分文字列が見つからない場合は、std::basic_string_view::npos が返されます。


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

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


C++ Strings の魔法使い:std::stoi で文字列を整数に変換する

この解説では、std::stoi の使い方を分かりやすく説明し、さらにその仕組みや注意点についても詳しく掘り下げていきます。std::stoi は、string 型の文字列を受け取り、それを int 型の整数に変換する関数です。使い方はとても簡単で、以下のコードのように記述します。


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

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