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で分割する方法のどちらでも実装できます。エラー処理の要件や可読性のバランスを考慮し、用途に合った方法を選びましょう。
-
【初心者向け】C/C++における多次元配列の初期化方法をわかりやすく解説
多次元配列とは、次元数が2以上ある配列のことです。本記事では、3×3×3の多次元配列におけるメモリ割り当ての仕組みと、実際に配列を初期化して内容を表示するC++プログラムを紹介します。下図は、次元が3×3×3の多次元配列に対するメモリ割り当ての戦略を示したものです。アルゴリズム多次元配列を初期化するプログラムは、以下の手順で構成されます。Begin 多次元配列の要素を初期化する 配列のサイズを出力する 配列の内容を表示する Endサンプルコード以下は、2行2列の二次元配列を初期化し、そのサイズと内容を出力するC++プログラムです。#include<iostream
-
整数を文字列に変換するC#プログラムの書き方
C#で整数(int型)を文字列(string型)に変換するには、ToString()メソッドを使用します。このメソッドは、すべての数値型が持つ標準的なメソッドで、呼び出すだけで簡単に文字列表現を取得できます。基本的な変換手順1. 変換したい整数を用意するまず、文字列に変換したい整数値を変数に格納します。int num = 299;2. ToString()メソッドで変換する次に、ToString()メソッドを呼び出して、整数を文字列に変換します。String s; int num = 299; s = num.ToString();完全なサンプルコード以下のコードを実行すると、整数を文字列に変