Page List

Search on the blog

2010年12月13日月曜日

C++でParse

POJで見つけた良問。
難しくはないけど、C/C++で如何に文字列をparseするかが練習できる良い問題です。
あと、無駄なキャスト(upper cast)はしないとか、scanfやcinとgetsの使い分けとか学べます。

取りあえず、問題とソースを見てください。
もっときれいなコードが書ける人は随時募集!(たくさんいそう。。)

問題:

ソース:
  1. char input[256];  
  2. int main() {  
  3.    int h, m, s, v = 0;  
  4.    double x = .0;  
  5.    double t0 = .0, t1 = .0;  
  6.   
  7.    while (gets(input)) {  
  8.        stringstream ss(input);  
  9.        string s1 = "", s2 = "";  
  10.   
  11.        ss >> s1 >> s2;  
  12.        sscanf(s1.c_str(), "%02d:%02d:%02d", &h, &m, &s);  
  13.   
  14.        t1 = h + m/60.0 + s/3600.0;  
  15.        x += (t1 - t0) * v;  
  16.        t0 = t1;  
  17.   
  18.        if (s2 != "")  
  19.            sscanf(s2.c_str(), "%d", &v);  
  20.        else  
  21.            printf("%02d:%02d:%02d %.2lf km\n", h, m, s, x);  
  22.    }  
  23.    return 0;  
  24. }  

0 件のコメント:

コメントを投稿