• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:空白を含むファイルからstring型で読み込む方法)

string型で空白を含むファイルを読み込む方法

このQ&Aのポイント
  • C++でクイズのようなものを作っています。空白を含むファイルからstring型で読み込む方法を知りたいです。
  • infile >> AnsHint[qNum][0] >> AnsHint[qNum][1]を使うと、スペースで区切られた単語しか読み込めません。スペースがある場合でも正しく読み込む方法を教えてください。
  • データファイルには答えとヒントが書かれており、それをstring型の変数に読み込みたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> 答,ヒントの順だから、最初の空白で区切ればいいです。 ...というわけで: #include <iostream> #include <fstream> #include <string> #include <vector> #include <utility> int main() { typedef std::pair<std::string,std::string> item; std::vector<item> ans_hint; std::ifstream file("dataFile.txt"); std::string line; while ( std::getline(file,line) ) { std::string::size_type pos = line.find(' '); std::string answer = line.substr(0,pos); std::string hint = line.substr(pos+1); ans_hint.push_back(item(line.substr(0,pos), line.substr(pos+1))); } for ( int i = 0; i < ans_hint.size(); ++ i) { std::cout << "answer=[" << ans_hint[i].first << "] hint=[" << ans_hint[i].second << "]\n"; } return 0; } ---結果--- answer=[Marigold] hint=[Annual flower ] answer=[Chair] hint=[Office furniture ] answer=[Monitor] hint=[Computer component ] answer=[Pencil] hint=[Writing instrument ] answer=[Stapler] hint=[Used for clipping paper together ] answer=[Telephone] hint=[Used for communicating with others ] answer=[Wire] hint=[Used for connecting electrical components]

ginkgo
質問者

お礼

わぁ、出来ました! すごいですね、こんなのがすぐに思いつくんですか? プロの仕事ですね。 ありがとうございました!

その他の回答 (4)

回答No.5

> すごいですね、こんなのがすぐに思いつくんですか? なにをするかがこれだけはっきりしているので、 思いつくというより stringのメソッドから使え そうなのを見繕うだけです。 ところで、前述のコード、ループ内の std::string answer = line.substr(0,pos); std::string hint = line.substr(pos+1); は不要(無駄)でした。

ginkgo
質問者

お礼

すみません、すっっっかり締め切るのを忘れていました。m(__)m 本当に助かりました。 ありがとうございました!

回答No.3

ごめんなさい、ちょんぼ。 答,ヒントの順だから、最初の空白で区切ればいいです。

回答No.2

#include <iostream> #include <string> int main() { std::string line; std::getline(std::cin, line); std::string::size_type pos = line.rfind(' '); std::string hint = line.substr(0,pos); std::string answer = line.substr(pos+1); std::cout << '[' << hint << ']' << std::endl; std::cout << '[' << answer << ']' << std::endl; return 0; }

回答No.1

改行までを一気に読み込み、 最後に現れる空白を境に分割すれば。

関連するQ&A

専門家に質問してみよう