2017-02-28 92 views
2

我有一個包含由空格分隔的十六進制值的文件。我想查找每個十六進制值的頻率並將其寫入文本文件。例如,考慮字符串"1b 17 3c 45 3f 52 7a 5a 3b 45 31 52 2e 17 3e 58 3f 44 "。我要統計每個十六進制值出現的頻率:計算.txt文件中的十六進制字符的頻率

1b - 1 times 
17 - 2 times 
.... so on. 

我當前已寫了一個C++程序,但它算作一個十六進制字符的十六進制字符之間的空間,以及和沒有按預期發揮作用。

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

using namespace std; 

int main() 
{ 
    int x = 0; 
    int total[128] = {0}; 
    int index; 

    ifstream infile; 
    ofstream outfile; 

    infile.open("hex.txt"); 
    outfile.open("results2.txt"); 
    if(!infile) 
    { 
     cout << "Error opening input file" << endl; 
     return 0; 
    } 

    char c; 
    while(infile.get(c)) 
    { 
     index = c; 
     total[index]++; 
    } 

    for (int i=0; i<128; i++)  // Print the results 
    { 
     outfile << " " << hex << i << " occurs " 
       << setw(5) << dec << total[i] << " times" 
       << " " << endl; 
    } 
    return 0; 
} 

注:

"hex.txt" is the input file 
"results2.txt" is the output file 
+0

閱讀[問],然後按照建議。並且不要垃圾郵件標籤。 C和C++是** Disctinct **語言! – Olaf

+0

你的問題是什麼?你自己有多遠? – Aeonos

+3

使用[map](http://en.cppreference.com/w/cpp/container/map)。 – BLUEPIXY

回答

2

只需讀取輸入文件爲十六進制:

while(infile >> hex >> index) 
{ 
    if (index < 0 || index >= 128) { // ensure value is in array range... 
     cerr << "Found an incorrect value " << hex << index << endl; 
     return 1; 
    } 
    total[index]++; 
} 
+0

謝謝@Serge。此方法有效 –