-2

次のようなファイルに行を保存したい

15 1 0 0 0 0
33 1 0 0 0 0
29 1 0 0 0 0
18 1 0 0 0 0
25 1 0 0 0 0

配列の要素になります。だから私がそうするなら

#include <stdio.h>
#include <vector>
using namespace std

char* file = "somefile.txt"
FILE *fb_r = fopen(file,"r");
char line[100];
vector <char> lineArr;
string lineElement;
while(fgets(line,256,fb_r){
  sscanf(line, "%s", &lineElement);
  lineArr.push_back(lineElement);  //problem arises here
}

しかし、エラーが発生します:
vectorを呼び出すことができません> :: pushBack(lineElement)

4

3 に答える 3

2

変更lineArr:

vector<string> lineArr;

また、あなたsscanfも壊れていますstd::string。全体はおそらく次のようになります。

lineArr.push_back(line);
于 2012-08-28T14:19:33.083 に答える
1

あなたのベクトルには単一charの sが含まれています

vector <char> lineArr;

std::string?をプッシュしようとしているようです。

于 2012-08-28T14:21:04.033 に答える
0

以前の良い答えに加えて、完全に機能するプログラムを見つけてください:

#include <stdio.h>
#include <vector>
#include <string>
#include <iostream>
using namespace std;

int main() {
    const char* file = "somefile.txt";
    FILE *fb_r = fopen(file,"r");
    char line[100];
    vector<string> lineArr;
    string lineElement;
    while(fgets(line,256,fb_r)) {
      lineElement = line;
      lineArr.push_back(lineElement.substr(0, lineElement.size() -1)); // We here remove the carriage return from the input file which you probably do not want
    }

    for(vector<string>::const_iterator lineIter = lineArr.begin(); lineIter != lineArr.end(); lineIter++) {
       cout << *lineIter << std::endl;
    }

    return 0;
 }

入力ファイルに関して、どちらが出力されますか:

15 1 0 0 0 0
33 1 0 0 0 0
29 1 0 0 0 0
18 1 0 0 0 0
25 1 0 0 0 0

それが役に立てば幸い、

于 2012-08-28T14:35:00.040 に答える