2015-01-13 19 views
1

爲了解決Euler Project 8而不借助「Big Number」庫,我想讀取txt.-file中的單獨數字以分隔點陣在一個數組中。在txt.文件的數字被安排如下:將txt.-file中單獨行上的數字讀取到C++中的數組中

094239874 ...... 29837429837 [50其中],

192319274 ...... 12837129873 [其中50]

這樣總共有20行50個數字,全部由進入分隔。所以我試圖編寫一個程序,將第一個數字寫入數組中的第一個點,並繼續這個過程(注意空間),直到第1000個數字。我曾嘗試在教程和其他在線的其他地方找到解決此問題的解決方案,但我無法使其適用於此特定示例。到目前爲止,我有類似的東西

int main() { 

int array[999]; 
string trial[999]; 

ofstream myfile; 
myfile.open ("example.txt"); 

for(i=1 ; i<=1000 ; i++) { 
myfile >> trial; 
// Somehow convert string to int as well in this loop? 
} 
+0

請記住,在文本文件中,數字只是其他任何字符。在字符串中它是一樣的,字符串(或文件)中的字符是字符,不管它是字母,數字,標點還是空格。 –

+0

另外,在顯示的小代碼片段中,您將'trial'作爲999個字符串的數組進行縮減。你想創建一個999個字符的字符串嗎? –

+0

最後,爲什麼要聲明999個條目的數組並嘗試從該文件讀取1000個條目?這裏有一個大小不匹配,以及數組從零開始索引(所以你不能在沒有減法的循環中使用'i')。 –

回答

1

你可以嘗試做這樣(先讀取文件內容爲string,然後將每個charint,順便說一句,你應該使用vector<int>而不是原始數組):

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

using namespace std; 

int main() 
{ 
    string str; 
    string total; 
    ifstream a_file("data.txt"); 

    while (getline(a_file, str)) 
     total += str; 

    vector<int> vec; 

    for (int i = 0; i < total.size(); i++) 
    { 
     char c = total[i]; 
     int a = c - '0'; 
     vec.push_back(a); 
    }  
} 
+0

我在理解代碼的某些部分時遇到了一些麻煩。也許你可以啓發我。 1)getline(a_file,str)何時變爲零,即whileloop何時停止? 2)當你完成+ = str時會發生什麼? 3)total.size()是否自動給出txt.file中的全部字符數4)vec.push_back(a)做了什麼? 5)我真的不知道你在哪裏告訴程序,數字的行被輸入分隔。非常感謝!請看 – Funzies

+0

:http://www.cplusplus。com/reference/string/string/getline/ –

+0

'std :: getline'返回一個被調用的流(本例中爲'ifstream',data.txt文件中的文件流),while循環測試如果有更多的數據可以讀取 –

0

這種方法將無法正常工作。根據this question,任何內置整數類型可能太小而不能用50個十進制數字表示一個數字的值。

+0

這就是爲什麼我試圖將文件的每個數字讀入陣列中的新位置。所以我只在數組中存儲單個數字的數字。之後,我可以執行我想要的操作。 – Funzies

1

您可以逐行讀取文件行,然後添加您的數字像這樣的數組:

// out of your loop 
std::vector<int> digits; 
// in your loop 
std::string buffer = /*reading a line here*/; 
for (auto c : buffer) { 
    digits.push_back(c - '0'); 
} 

此外,STL容器比C風格的數組(std::vector/​​)更好。

1

我想這是你在找什麼

int main(void) 
{ 
    unsigned char numbers[20][50]; 
    FILE *pf = fopen("example.txt", "r"); 
    for(int i = 0; i < 20; i++) 
    { 
     // read 50 characters (digits) 
     fread(&numbers[i], 1, 50, pf); 
     // skip line feed character); 
     fseek(pf, 1, SEEK_SET); 
    } 
    fclose(pf); 

    // conversion from ascii to real digits by moving the digit offset (subtracting by the first digit char in ascii table) 
    for(i = 0; i < 20*50; i++) 
     ((unsigned char*)numbers)[i] -= (unsigned char) '0'; 

    // the digits are now stored in a 2-dimensional array (50x20 matrix) 

    return 0; 
} 
相關問題