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

C/C++で文字列を整数配列に変換する方法

本記事では、C/C++においてカンマ区切りの数値文字列(例:「2, 6, 3, 14」)を整数型の配列へ変換する方法を解説します。文字列操作と数値変換は、競技プログラミングや入力データの解析など、さまざまな場面で役立つ基本テクニックです。

基本的な考え方

変換の流れは以下のとおりです。

  • 結果を格納するための新しい配列(ここではstd::vector)を用意する
  • 与えられた文字列を先頭から1文字ずつ走査する
  • 文字がカンマ「,」なら、それまでに組み立てた数値を配列へ追加し、次の要素へ移る
  • 文字が数字なら「現在の値 × 10 + 新しい桁」で数値を組み立て続ける
  • 空白などの区切り文字は読み飛ばす

この方法なら「14」のような複数桁の数値も、1桁ずつ順に処理することで正しく変換できます。

サンプルコード(C++)

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

// 文字列を整数配列に変換する関数
void convert_array(const string& str) {
    vector<int> arr;
    int current = 0;
    bool hasDigit = false;

    // 文字列を走査
    for (char c : str) {
        if (c == ',') {
            arr.push_back(current);   // 数値を確定して追加
            current = 0;
            hasDigit = false;
        } else if (isdigit((unsigned char)c)) {
            current = current * 10 + (c - '0'); // 桁を組み立てる
            hasDigit = true;
        }
        // 空白などその他の文字は無視
    }
    if (hasDigit) {
        arr.push_back(current); // 末尾の数値を追加
    }

    // 結果の表示
    int sum = 0;
    cout << "arr[] = ";
    for (int x : arr) {
        cout << x << " ";
        sum += x;
    }
    cout << "\\nSum of array is = " << sum << endl;
}

int main() {
    string str = "2, 6, 3, 14";
    convert_array(str);
    return 0;
}

実行結果

arr[] = 2 6 3 14 
Sum of array is = 25

コードの解説

ポイントとなるのは次の2点です。

  • 文字から数値への変換: 数字文字cの数値は「c - '0'」で求められます。文字コード上、'0'〜'9'が連続して並んでいるためです。
  • 複数桁の組み立て: 新しい数字を読むたびに「current * 10 + 桁」を計算することで、例えば「1」「4」と読み進めながら 1 → 14 と数値を成長させられます。

また、可変長配列としてstd::vectorを使用しているため、入力文字列の長さに応じて柔軟に対応できます。

stringstreamを使った別解(C++)

C++では、<sstream>ヘッダーのstd::stringstreamとstd::getlineを組み合わせると、より簡潔に記述できます。カンマを区切り文字として文字列を分割し、std::stoiで各トークンを数値に変換します。

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

int main() {
    string str = "2, 6, 3, 14";
    vector<int> arr;

    stringstream ss(str);
    string token;
    while (getline(ss, token, ',')) {
        arr.push_back(stoi(token)); // 前後の空白は自動的に無視される
    }

    int sum = 0;
    cout << "arr[] = ";
    for (int x : arr) {
        cout << x << " ";
        sum += x;
    }
    cout << "\\nSum of array is = " << sum << endl;
    return 0;
}

こちらの方法はコードが短く読みやすい一方、不正なトークンが含まれるとstoiが例外を送出する点には注意が必要です。

まとめ

文字列を整数配列に変換するには、1文字ずつ走査して桁を組み立てる方法と、stringstreamで分割する方法のどちらでも実装できます。エラー処理の要件や可読性のバランスを考慮し、用途に合った方法を選びましょう。

  1. 【初心者向け】C/C++における多次元配列の初期化方法をわかりやすく解説

    多次元配列とは、次元数が2以上ある配列のことです。本記事では、3×3×3の多次元配列におけるメモリ割り当ての仕組みと、実際に配列を初期化して内容を表示するC++プログラムを紹介します。下図は、次元が3×3×3の多次元配列に対するメモリ割り当ての戦略を示したものです。アルゴリズム多次元配列を初期化するプログラムは、以下の手順で構成されます。Begin 多次元配列の要素を初期化する 配列のサイズを出力する 配列の内容を表示する Endサンプルコード以下は、2行2列の二次元配列を初期化し、そのサイズと内容を出力するC++プログラムです。#include<iostream

  2. 整数を文字列に変換するC#プログラムの書き方

    C#で整数(int型)を文字列(string型)に変換するには、ToString()メソッドを使用します。このメソッドは、すべての数値型が持つ標準的なメソッドで、呼び出すだけで簡単に文字列表現を取得できます。基本的な変換手順1. 変換したい整数を用意するまず、文字列に変換したい整数値を変数に格納します。int num = 299;2. ToString()メソッドで変換する次に、ToString()メソッドを呼び出して、整数を文字列に変換します。String s; int num = 299; s = num.ToString();完全なサンプルコード以下のコードを実行すると、整数を文字列に変