2013-11-26 80 views
0

我正在做一個C++課程和通過學年的中途,我們得到一個模擬連續/練習。它沒有標記,它只是用於練習。 基本上,我們必須從文件中做到這一點簡單的解碼程序C++

(一)閱讀文本,其內容存儲在 字符A.任何陣列(b)計算的 A中的每個字母出現的次數和百分比使用兩個平行陣列(B和C):一個包含 26個字母,另一個包含它們對應的 發生的百分比。 (c)使用排序算法(例如, 氣泡排序算法)對 的上述兩個平行數組進行排序,以發生百分比的降序排列。 (d)將(b)和(c) 應用於訓練和編碼文本。將兩組並行 陣列(用於訓練和編碼文本)存儲起來以供進一步使用。 (e)使用上述兩組已排序的並行數組來查找並且 在訓練和編碼012-文本中顯示字母的一對一映射。 (f)用編碼信息中的字母代替字母 它們表示(g)交互詢問用戶一對字符, 將它們存儲在兩個字符變量(例如X和Y)中,並用 代替所有出現的字母X代表字母Y中的數字 個字符。 (h)將存儲在字符數組 中的解碼文本保存到文件中。 (i)能夠重複(f),(g)和(h)與用戶希望的次數一樣多。

我們得先做一個程序代碼,然後是面向對象的。

#include <fstream> //for file I/O 
#include <iostream> //for cout, endl 
#include <string> //for countletters 
using namespace std; 

int countletters(/*in*/ int& sum) //counting the number of letters contained in the file 
{ 
    string line; 
    ifstream inData ; 
    inData.open("encoded.txt"); 
    while(!inData.eof()) 
    { 
     getline(inData,line); 
     int numofChars= line.length(); 
     for (unsigned int n = 0; n<line.length();n++) 
     { 
      if (line.at(n) == ' ') 
      { 
      numofChars--; 
      } 
     } 
     sum=numofChars+sum; 
    } 
    inData.close(); 
    //sum is the number of letters inside the encoded.txt file 
} 

void fileintoarray(int& sum) 
{ 
    int arraysize = sum; 
    char myArray[arraysize]; 
    char current_char; 
    int num_characters = 0; 
    int i = 0; 

    ifstream myfile ("encoded.txt"); 
    if (myfile.is_open()) 
     { 
      while (!myfile.eof()) 
      { 
       myfile >> myArray[i]; 
       i++; 
       num_characters ++; 
      } 
      for (int i = 0; i <= num_characters; i++) 
      { 
       cout << myArray[i]; 
      } 
      system("pause"); 
    } 
} 

int main() 
{ 
    int sum=0; 
    countletters(); 
    fileintoarray(); 
    return 0; 
} 

這是我到目前爲止寫的,第二個功能不起作用。 它無法編譯。

任何人都可以請幫我這個嗎?

+1

沒有故事請! – P0W

+2

_''doesn't work'_非常含糊! –

+1

什麼不行,它不會編譯? – Raxvan

回答

3

您正在訪問函數「fileintoarray」中的變量「sum」,但它不在您在「計數器」中聲明的範圍內。

瞭解如何返回值以及如何將參數傳遞給函數 - 或者,如果您還沒有學習過,並且無論如何都應該相處 - 使用全局變量,因爲這有點像面向對象的版本是。

+0

在課堂上,講師告訴我們全局變量是一個很大的禁忌。 我試圖通過引用確實。這是我應該改變「int countletters(int&sum)」的改變嗎? 如果我用整數替換sum,編譯器將會失敗。 –

+0

在這種情況下,您將不得不讓第一個函數返回總和。然後,您可以將其存儲到main中的一個變量中,並從那裏將它傳遞給另一個函數。 – fpw

+0

更新了上面的問題。 –