2017-03-22 1 views
-2

私は、ファイルからテキストを読み込んで特定の単語を検索するプログラムを作成しようとしています。そこから処理します。私は配列の最初のスポットが占有されている関数の外の配列にアクセスしようとすると、私はしたいデータを格納するために配列を使用しています。もちろん、コードは不完全ですが、私はこれを引き起こしていることを知る必要がありますか?関数外の配列に値が保持されないのはなぜですか?

#include<iostream> 
#include<string> 
#include<fstream> 

using std::cout; using std::cin; using std::endl; using std::string; 
using std::ifstream; using std::getline; 

string data, strL = "language", strC = "created", strT = "timestamp"; 
string lang[2], date[2]; 
int count = 0, l = 0, c = 0; 
ifstream rawData("testsample.txt"); 

void search(int count, string data, string heading) { 
int x, y; 
if (data.find(heading) != string::npos) { 
    //cout << heading << endl; 
    if (heading == strL) { 
     x = 4; y = 2; 
     lang[count] = data.substr(data.find(strL) + strL.length() + x, y); 
     //cout << lang[count] << endl; 
    } 
    if (heading == strC) { 
     x = 4; y = 29; 
     date[count] = data.substr(data.find(strC) + strC.length() + x, y); 
    } 
} 
count++; 
} 

int main() { 
while (getline(rawData, data)) { 
    search(l, data, strL); 
    search(c, data, strC); 
    //count++; 
}cout << lang[0] << " " << lang[1] << endl; 
cout << date[1]; 

return 0; 
}  
+2

示されたコードは、解析できない混乱です。グローバル変数。無作為に消える、奇妙な、非論理的なインデント。マジック定数。それが何をしようとしているにしても、それは正しいことができないし、全体を廃棄するのに手間がかからず、最初から始める方法はありません。 –

答えて

0

私はあなたの問題はあなたがグローバル変数count、ともsearch機能countにパラメータを持っているという事実にあると思います。 searchファンクション内のcount++ステートメントは、グローバルではなくパラメータをインクリメントします。この関数にはループがないので、langdateに割り当てるインデックスは常にゼロです。

パラメータを削除するとコードで必要な処理が行われることがありますが、2つ以上処理するとオーバーフローします。 std::vectorやその他の動的サイズ変更コンテナクラスの使用を検討することもできます。

関連する問題