- ベストアンサー
string型で空白を含むファイルを読み込む方法
- C++でクイズのようなものを作っています。空白を含むファイルからstring型で読み込む方法を知りたいです。
- infile >> AnsHint[qNum][0] >> AnsHint[qNum][1]を使うと、スペースで区切られた単語しか読み込めません。スペースがある場合でも正しく読み込む方法を教えてください。
- データファイルには答えとヒントが書かれており、それをstring型の変数に読み込みたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> 答,ヒントの順だから、最初の空白で区切ればいいです。 ...というわけで: #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]
その他の回答 (4)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> すごいですね、こんなのがすぐに思いつくんですか? なにをするかがこれだけはっきりしているので、 思いつくというより stringのメソッドから使え そうなのを見繕うだけです。 ところで、前述のコード、ループ内の std::string answer = line.substr(0,pos); std::string hint = line.substr(pos+1); は不要(無駄)でした。
お礼
すみません、すっっっかり締め切るのを忘れていました。m(__)m 本当に助かりました。 ありがとうございました!
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
ごめんなさい、ちょんぼ。 答,ヒントの順だから、最初の空白で区切ればいいです。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
#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; }
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
改行までを一気に読み込み、 最後に現れる空白を境に分割すれば。
お礼
わぁ、出来ました! すごいですね、こんなのがすぐに思いつくんですか? プロの仕事ですね。 ありがとうございました!