C++でカンマ区切りの文字列から整数を取り出す方法
カンマで区切られた複数の整数が含まれた文字列があるとします。これらの整数を個別に取り出し、それぞれ別の行に表示したい場合があります。このような処理には、C++のstringstream(sstreamライブラリ)を利用すると便利です。
stringstreamは、C++に用意されている文字列ベースのストリームクラスの一つです。抽出演算子(>>)でデータを読み取り、挿入演算子(<<)でデータを書き込み、str()関数で内部の文字列バッファの内容を設定・取得することができます。
例えば、入力が s = "56,9,85,256,47" の場合、出力は次のようになります。
56 9 85 256 47
解決の手順
この問題を解くためには、以下の手順に従います。
take_int(string str)関数を定義します。stringstreamオブジェクト
ssを作成します。結果を格納する配列
resultを定義します。ssから新しい整数値をtmpに読み取れている間、以下を繰り返します。resultの末尾にtmpを追加します。1文字読み捨てて、カンマをスキップします。
resultを返します。
main関数では以下を行います。
配列
integers = take_int(s)を定義します。i = 0 から integers のサイズ未満まで、i を1ずつ増やしながら以下を繰り返します。
integers[i]を表示します。
実装例
理解を深めるために、実際のコードを見てみましょう。
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
vector<int> take_int(string str) {
stringstream ss(str);
vector<int> result;
char ch;
int tmp;
while(ss >> tmp) {
result.push_back(tmp);
ss >> ch;
}
return result;
}
int main(){
string s = "56,9,85,256,47";
vector<int> integers = take_int(s);
for(int i = 0; i < integers.size(); i++)
cout << integers[i] << "\n";
}
入力
56,9,85,256,47
出力
56 9 85 256 47
-
C++で整数の各桁を拡大表示(ズーム)するプログラムの作り方
この記事では、C++を使って整数の各桁を拡大表示(ズーム)するプログラムを紹介します。ここでの「ズーム」とは、数字を「#」などの記号を使って通常より大きな形で描画することを指します。考え方自体はシンプルですが、0から9までの各数字を大きな形式で一つずつパターン化する必要があります。 ズーム表示の基本的な考え方 各数字は5行×5列のグリッドとして表現します。二重のforループでグリッド全体を走査しながら、行・列の位置関係をもとに条件分岐を行い、「#」と空白のどちらを出力するかを決めます。たとえば「0」なら外枠だけを「#」で囲み、「8」なら上下の横線と左右の縦線を組み合わせて描画するといった具合で
-
Javaで文字列のリストをカンマ区切りの文字列に変換する方法
この記事では、Javaを使って文字列のリスト(List)をカンマ区切りの1つの文字列に変換する方法について解説します。 リスト(List)とは リストとは、要素を順序どおりに格納し、インデックスを使ってアクセスできるコレクションです。要素の挿入・更新・削除・検索をインデックスベースで行えるメソッドが用意されており、重複した要素を持つこともできます。 今回実現したい処理は以下のとおりです。 入力例 Input list: [Java, Scala, Python] 期待される出力 The list with comma separated elements: Java, Scala, Pytho