2016-01-09 45 views
1

對於一個學校實驗室,我必須帶一個帶有歌曲的文本文件,並將總行時間設置爲特定格式。我完成了我的代碼,但在我的3 atoi(line())下有我的timeAuthorLine函數的錯誤行。他們說:用atoi()讀取數字的語法不正確

std::string line

Error: must have class type

我懷疑我濫用atoi(),但我不知道如何?任何幫助表示讚賞:)

我的文本文件:

Playlist.txt

Mingus "Ah um" 
"Better Git It in Your Soul" 7:23 Charles Mingus 
"Goodbye Pork Pie Hat" 5:44 Charles Mingus 
"Boogie Stop Shuffle" 5:02 Charles Mingus 
"Self-Portrait in Three Colors" 3:10 Charles Mingus 
"Open Letter to Duke" 5:51 Charles Mingus 
"Bird Calls" 6:17 Charles Mingus 
"Fables of Faubus" 8:13 Charles Mingus 
"Pussy Cat Dues" 9:14 Charles Mingus 
"Jelly Roll" 6:17 Charles Mingus 
"Bashin" 9:53 Charles Mingus 

那是應該發生的輸出:

Mingus "Ah um" 
----------------------------------------------------- 
1. 7:23 Better Git It in Your Soul by Charles Mingus 
2. 5:44 Goodbye Pork Pie Hat by Charles Mingus 
3. 5:02 Boogie Stop Shuffle by Charles Mingus 
4. 3:10 Self-Portrait in Three Colors by Charles Mingus 
5. 5:51 Open Letter to Duke by Charles Mingus 
6. 6:17 Bird Calls by Charles Mingus 
7. 8:13 Fables of Faubus by Charles Mingus 
8. 9:14 Pussy Cat Dues by Charles Mingus 
9. 6:17 Jelly Roll by Charles Mingus 
10. 9:53 Bashin by Charles Mingus 
----------------------------------------------------- 
Total Playing Time = 1:07:04 

我的代碼:

#include <iostream> 
#include <iomanip> 
#include <string> 
#include <vector> 
#include <fstream> 
#include <stdlib.h> 

using namespace std; 

void readLine(vector<string> &playlist); 
void timeAuthorLine(const vector<string> playlist, vector<string> &author, vector<string> &name, int &totaltime, vector<int> &min, vector<int> &sec1, vector<int> &sec2); 
void displayData(const vector<string> playlist, const vector<string> author, const vector<string> name, int totaltime, const vector<int> min, const vector<int> sec1, const vector<int> sec2); 

int main() 
{ 
    vector<string> playlist; 

    readLine(playlist); 

    system("pause"); 

    return 0; 
} 
void readLine(vector<string> &playlist) 
{ 
    vector<string> author, name; 
    vector<int> min, sec1, sec2; 
    int totaltime = 0, i = 0; 
    ifstream inFile("Playlist.txt"); 
    if (inFile.fail()) 
    { 
     cout << "File not found."; 
      exit(1); 
    } 
    else 
    { 
     while (getline(inFile, playlist[i])) 
     { 
      getline(inFile, playlist[i]); 
      i = i + 1; 
     } 
     inFile.close(); 
     timeAuthorLine(playlist, author, name, totaltime, min, sec1, sec2); 
     displayData(playlist, author, name, totaltime, min, sec1, sec2); 
    } 
} 
void timeAuthorLine(const vector<string> playlist, vector<string> &author, vector<string> &name, int &totaltime, vector<int> &min, vector<int> &sec1, vector<int> &sec2) 
{ 
    for (int i = 0; i < playlist.size(); i++) 
    { 
     string line = playlist[i]; 
     int index = line.find(":"); 
     min[i] = atoi(line[index - 1].c_str()); 
     sec1[i] = atoi(line[index + 1].c_str()); 
     sec2[i] = atoi(line[index + 2].c_str()); 
     totaltime = totaltime + 60 * min[i] + 10 * sec1[i] + sec2[i]; 
     for (int j = index + 4; j < line.size(); j++) 
     { 
      author[i] = line[j]; 
     } 
     for (int k = 1; k < index - 4; k++) 
     { 
      name[i] = line[k]; 
     } 
    } 
} 
void displayData(const vector<string> playlist, const vector<string> author, const vector<string> name, int totaltime, const vector<int> min, const vector<int> sec1, const vector<int> sec2) 
{ 
    cout << playlist[0] << endl; 
    cout << "-----------------------------------------------------" << endl; 
    for (int i = 0; i < playlist.size(); i++) 
    { 
     if ((i + 1) > 10) 
      cout << " " << i + 1 << ". "; 
     else 
      cout << i + 1 << ". "; 
     cout << min[i] << ":" << sec1[i] << sec2[i] << " " << name[i] << " by " << author[i] << endl; 
    } 
    cout << "-----------------------------------------------------" << endl; 
    cout << "Total Playing Time = " << totaltime/3600 << ":"; 
    if ((totaltime % 3600)/60 < 10) 
     cout << "0" << (totaltime % 3600)/60 << ":"; 
    else 
     cout << (totaltime % 3600)/60 << ":"; 
    if ((totaltime % 3600) % 60 < 10) 
     cout << "0" << (totaltime % 3600) % 60; 
    else 
     cout << (totaltime % 3600) % 60; 
} 
+0

btw這是一個爵士樂播放列表。 – e7kim

+0

你爲什麼不接受我的答案?如果您覺得缺乏,我希望有機會改正它。如果您無法發表評論,請編輯您的問題以更具體地瞭解您的需求。 –

+0

抱歉,我這樣做了,我打算爲另一個問題的答案做這件事。 – e7kim

回答

1

line[x]char因此不是一個類,並且不具有諸如c_str()的成員。

既然你將個位數,試試這個:

min[i] = line[index - 1] - '0'; 
sec1[i] = line[index + 1] - '0'; 
sec2[i] = line[index + 2] - '0'; 

由於char是一個整數類型,你可以簡單地從字符減去'0'的ASCII/Unicode值來獲得數字的數值。