2014-02-10 87 views
1

因此,對於我的編程任務,我必須將C字符串轉換爲int數組

處理來自輸入文件的數據並對其執行一些操作。

以下是參數。

一位教師的班級不超過40名學生,每個班級需要6次考試。對於班級中每個學生的 ,輸入文件中有一行。該行包含學生的第一個 名稱(不超過10個字符),姓氏(不超過12個字符),ID#(6個字符的字符串)和6個整數測試分數。 輸入文本文件應該被命名爲 student_input.dat

還要注意空格的量 名稱,ID和等級之間 可以是任意的,即任何數字。儘管至少會有一個空間。 最後一個年級與表示行'/ n'結尾的不可見符號之間可能有空格。 每行的字符總數不會超過256,包括行符號的末尾 。

此外,我們不能使用任何涉及字符串的東西,所以幾乎限制了我只使用c字符串。

我的問題是我目前被困在試圖將提取的char字符串轉換爲int數組,以便我可以對它們進行數學運算。

這是我目前的代碼。

int main() 
{ 
    char * lastName; 
    char * firstName; 
    char * idNumber; 
    char * testScores; 
    char rawData[256] = ""; 
    ifstream fin; 
    ofstream fout; 

    fin.open("student_input.dat"); 

    if (!fin) 
    { 
     cout << "Program terminated. Input file did not open." << endl; 
     fin.close(); 
     return 1; 
    } 

    if(fin) 
    { 
     for(int i = 0; i < 41; i++) 
     { 
      fin.getline(rawData, 256, '\n'); 
      lastName = strtok(rawData, " "); 
      cout << lastName; 
      firstName = strtok(NULL, " "); 
      cout << firstName; 
      idNumber = strtok(NULL, " "); 
      cout << idNumber << " "; 
      for(int j = 0; j < 6; j++) 
      { 
       testScores = strtok(NULL, " "); 
       cout << testScores << " "; 
      } 
      cout << endl; 
     } 
    } 

    return 0; 
} 
+2

你有沒有試過在for循環中訪問CString的每個字符,並用atoi()將它們轉換爲int,以便將它們保存到一個int數組中? –

+0

我只是在我的第二學期的編碼和講師沒有解釋atoi(),我從來沒有聽說過它? 你可以詳細說明如何使用atoi()嗎? –

+0

http://www.cplusplus.com/reference/cstdlib/atoi/ – Philip

回答

0

如果我理解正確的問題,你可能是有兩個具體問題:

  1. 如何從字符串中提取特定的數據值?
  2. 如何將包含數字字符的字符串轉換爲數字?

我給你兩個解決方案(不張貼實際的代碼,因爲它是一個(可能)學校作業)。

解決方案1:

1. Let input be a string or array of characters 
2. Read the entire line into input 
3. Set index = 0 
4. while (index is not beyond the end of input) 
    4.1. Set start = (first non-whitespace character in input starting from index) 
    4.2. Set end = (first whitespace character/end of line character/end of file in input starting from start) 
    4.3. Set substring = (string containing the characters in input from indices start to end-1, both end inclusive) 
    4.4. Save substring (into an array or whatever). 
    4.5. Set index = end 
5. end-while 

這樣一來,你已經得到了所有空格分隔子爲不同的字符串。處理它們只要你喜歡(即,第一個子字符串是第一個名字,第二個是姓氏等等)...

一旦你找到你的字符串包含成績,要麼使用atoi從評論到你的提問或編寫一個將包含單個數字的字符串轉換爲整數的函數。

解決方案2:

1. Declare three string (or array of chars) variables firstname, lastname and id 
2. Declare six integers naming grade1 to grade6 
3. Use the >> operator of ifstream to read into the values sequentially, that is, read to firstname, lastname, id, grade1,...grade6 

>>運算符時應該採取的字符串或整數事項的憂慮,而你沒有關於空格數憂無論是。

如果你想避免的atoi,我不會推薦避免,那麼這裏是一個簡單的算法的數字集合轉換成一個數字:

1. Let input = array of characters/string containing only numerical letters. 
2. Set index = 0 
3. Set sum = 0 
4. While index is not beyond the last index at input 
    4.1. Set c = the character at index 
    4.2. Set value = ASCII value of c 
    4.3. Set sum = sum * 10 + value; 
    4.4. Increase index by 1 
5. End-while 

希望這有助於:)