回復 1# may - #include<bits/stdc++.h>//引入所有常用標頭檔,簡化撰寫(但在大型專案中不建議使用)。
- using namespace std;
- ifstream ifs;
- string str;
- vector<string> v;
- int n;
- /*
- #include<bits/stdc++.h>:引入所有常用標頭檔,簡化撰寫(但在大型專案中不建議使用)。
- ifstream ifs:用來讀取 read.csv 的輸入檔案串流。
- vector<string> v:用來儲存每一筆角色資料(整行以字串形式儲存)。
- int n:用來儲存使用者輸入要顯示的前 n 名。
- */
- bool compare(string s1, string s2)
- {
- int idx1=s1.rfind(','), idx2=s2.rfind(',');
- int t1=stoi(s1.substr(idx1+1)), t2=stoi(s2.substr(idx2+1));
- return t1>t2;
- }
- /*
- rfind(','):找到最後一個逗號的位置,因為 Score 是每行資料的最後一欄。
- substr(idx+1):從最後一個逗號後面擷取出分數字串。
- stoi():將分數字串轉換成整數。
- return t1 > t2:定義排序為「分數高者在前」。
- */
- int main()
- {
- ifs.open("read.csv");
- ifs>>str;
- while(ifs>>str)
- v.push_back(str);
- */
- 開啟 read.csv。
- 第一行假設是標題行(略過)。
- 接下來每一行都讀進 v 向量中(格式是整行字串)。
- */
- cin>>n;
- if(n>v.size())
- cout<<"Exceeds data upper limit"<<endl;
- //若 n 大於資料筆數,輸出「Exceeds data upper limit」。
- else
- {
- sort(v.begin(), v.end(), compare);
- for(int i=0; i<n; i++)
- {
- v[i].replace(v[i].find(","),1," | ");
- v[i].replace(v[i].find(","),1," | ");
- v[i].replace(v[i].find(","),1," | ");
- cout<<i+1<<" | "<<v[i]<<endl;
- }
- }
- /*
- 使用 sort() 函數,依照分數由高至低排序。
- 使用三次 replace() 把每一行的逗號換成 |,分隔成四個欄位:
- Id | Name | Level | Score
- 輸出時加上 Rank(從 1 開始)。
- */
- return 0;
- }
複製代碼 --------------------------
--------------------- |