2012-12-11 41 views
2

我想要做的是,現在我知道數字「10」的索引,並且我想將其讀入ary中。C++如何將文本文件中的特定元素讀入數組?

#include <iostream> 
#include <fstream> 
using namespace std; 

int ary[1]; 
ifstream inData; 
inData.open("num.txt"); 
for (int i=1;i<2;i++){ 
    inData >> ary[0]; 
} 

num.txt: 0 10 20 
three number and separate by a '\t' 

但這不起作用,我該怎麼辦?

回答

0

它是您要查找的第二個數字,因此請將我更改爲0或<至< =。其次,由於您知道索引,因此您需要一個大小爲2 int ary[2]的數組,或者僅使用int ary,並且以前迭代中寫入的內容將僅由循環的每個後續迭代覆蓋。

int main() { 
    int ary; 
    ifstream inData; 
    inData.open("num.txt"); 
    for (int i=0;i<2;i++){ 
     inData >> ary; 

    } 
    printf("%d\n",ary); 
    return 0; 
} 

與陣列

int main() { 
    int ary[2]; 
    ifstream inData; 
    inData.open("num.txt"); 
    for (int i=0;i<2;i++){ 
     inData >> ary[i]; 
     printf("%d\n",ary[i]); 
    } 

    return 0; 
} 
+0

This Works!沒有數組的是我真正想要的。然而,num.txt有大約90億個元素,並且我必須多次爲num.txt中的不同索引元素執行搜索操作。有沒有更快的方法來做到這一點?也許使用指針來定位特定的元素? – user1891134

+0

你可以使用諸如fread()這樣的方法一次讀入內存中,像數組一樣,直到你到達相應的塊,然後通過執行索引%chunk_size來計算給定塊中的索引工作。否則,你將不得不遍歷整個文件到你的索引。這也涉及使用FILE指針而不是ifstream。 – theClap

0

你的int數組的大小爲1。我不認爲它會工作遍歷文件。

儲備更多的空間,能在像3個值來讀取,

int ary[3]; 

,改變你的循環到:

for (int i=0;i<3;i++) 

我認爲你應該得補充一點:

for (int i=0;i<3;i++) 
inData.read(buffer,sizeof(int)) 
0

您正在尋找一個特定的元素;那麼不需要數組。

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    int elementValue = 0; 
    int indexOfElement = 2; 
    ifstream inData; 
    inData.open("num.txt"); 
    if (!inData.good()) 
    { 
     std::cout << "Cannot open file" << std::endl; 
     return 1; 
    } 
    int currentElement = 1; 
    while(currentElement <= indexOfElement && inData.good()) 
    { 
     inData >> elementValue; 
     ++currentElement; 
    } 
    if (inData.good()) 
     std::cout << "Found: " << elementValue << std::endl; 
    else 
     std::cout << "Failed to find enough elements" << std::endl; 

    return 0; 
} 
相關問題