2017-04-13 45 views
0

嗨我想表达这个成C++向量<位集< 8 >> s {s1,s2,...,sn}; n是文件中元素的编号。所以,我让cnt来计算文件中的元素。 所以,我做了这个代码。但我认为我的代码是不正确的。但我不知道如何解决这个问题。我怎么能表达这个元素到c + +

int cnt; 
for (int x = 0; x < sizeof(files)/sizeof(files[0]); x++) { 
    std::ifstream f; 

    f.open(files[x].c_str(), std::ios::in); 
    if (f.good()) { 
     while (!f.eof()) {//end of file check 
      f >> str; 
      bitset<8> s(str); 
      cnt++; 
      str.clear(); 
     } 
     f.close(); 
    } 

    for (int i = 0; i < cnt; i++){ 
     vector<bitset<8>> s{ s[i] }; 
    } 
} 
+2

参见[?为什么是的iostream :: EOF算错了一个循环条件中(http://stackoverflow.com/questions/5605125/why-is -iostreameof-loop-condition-considered-wrong) –

+0

[从文件中读取字符串并将其转换为bitset <12>](http://stackoverflow.com/questions/43381239/read-string-from-file -and-turn-into-bitset12) – chbchb55

+1

你最后一个for循环并没有做任何有用的事情。 – chbchb55

回答

1

您的代码可以简化很多。这里有一个例子:

// Create the vector of bitsets. It is empty to start with. 
vector<bitset<8>> s; 

// Go through each file. 
for (int x = 0; x < sizeof(files)/sizeof(files[0]); x++) 
{ 
    // Open the file. 
    // std::ifstream f(files[x].c_str()); // For pre C++11. 
    std::ifstream f(files[x]);   // For C++11 or later. 

    // Define str here. 
    // It should not be needed outside the for loop. 
    std::string str; 

    // Keep reading from the file until read fails. 
    while (f >> str) 
    { 
     // Construct a bitset from the string. 
     bitset<8> si(str); 

     // Add the bitset to the vector of bitsets. 
     s.push_back(si); 
    } 

    // There is no need to explicitly close the file. 
    // The destructor will take care of that. 
} 

延伸阅读:Why is iostream::eof inside a loop condition considered wrong?

+2

Ant for'loop'可能会进一步简化为'for const auto&file:files)':) –