こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[C++].csvファイルからキーワード検索

開発環境はLINUXのC++でVC++の特殊な関数は使えません。

ある.csvファイルやスペースで区切られたデータファイルを読み込んで
指定した列に特定のキーワードがあれば、同じ行の別の列データを返す
というような関数を作るのが目的です。

data.csv
1, aaa, xxx
2, bbb, yyy
3, ccc, zzz

find_keywords(bbb);
実行結果
xxx

条件として引数はstring型で渡す、関数はvoid型で結果は参照の上書き
とする必要があるのですが、だいたい以下のような流れで書きたいと思っています。
(条件を満たしていればこれに限りません)

void find_keywords(std::string words, std::string& result)
{
 while (ファイルの最後まで) {
  while (","を見つけるまで) {
   if (一致すれば) {
    result = 指定した列;
   }
  }
 }
}

main()
{
 std::string input;
 std::string result;

 std::cin >> input;
 find_keywords(input, result);
 std::cout << result;
}

inputを渡すときsegmentation errorとなってしまいます。
Cでchar*型で渡しているときはうまくいったのですが
何がいけないのでしょうか。

投稿日時 - 2011-08-23 01:12:49

QNo.6961167

困ってます

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

printf は与えたものを「直ちに」出力するとは限らないので, それだけでは「find_keywords()を呼び出した瞬間にエラーになっている」とまでは言い切れません.

でちょっと試していただきたいのですが,
#include <string>
#include <cstdio>
#include <iostream>

using namespace std;

void find_keywords(string words)
{
printf("OK\n"); fflush(stdout);
cout << words << endl << flush;
}

int main()
{
string input;

cin >> input;
find_keywords(input);
cout << input << endl << flush;

return 0;
}
だとどうなるんでしょうか? これと printf のところを
cout << "OK\n" << flush;
に変えたものとを比較すると何かが見えてくるかもしれません.

投稿日時 - 2011-08-24 11:05:18

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

「inputを渡すときsegmentation errorとなってしまいます。」ということですが, もっと厳密に「ここでエラーになる」というのはわかりませんか?

投稿日時 - 2011-08-23 01:29:13

補足

find_keywords()を呼び出した瞬間にエラーになっていると思います。

find_keyword(std::string words)
{
printf("OK");
}
としても何も表示されませんので・・・

errorではなくsegmentation faultでした。

投稿日時 - 2011-08-23 08:50:18

あなたにオススメの質問