0

フォームの日付strVal="1992-12-12"または"1992-9-9"を19921212および19920909に変換したいと思います。そのために、次のコードをC /C++で記述しました。しかし、問題はそれが1992-12-12を1992012012に変換することです。このバグをどのように修正するかについて誰かが私を導くことができますか?「1992-9」という形式の入力もあるかもしれませんが、それを19920900に変換したいと思います。または「1992」から「19920000」に変換したいのですが。

stringstream     collectTimeBegin;

for (string::iterator it = strVal.begin(); it != strVal.end(); )
{
      if (*it != '-')
      {
             cout<< "\n -- *it=" << *it;
             collectTimeBegin << *it;
             it++;
      }
      else
      {
           stringstream    si("");
           stringstream    sj("");
           int             i;               

           it++;
           si << *(it + 1);
           sj<< *(it + 2);
           i = atoi((si.str()).c_str()), j = atoi((sj.str()).c_str());
           cout << "\n i=" << i << "\t j=" << j << "\n";
           if ((i == 4) || (i == 5) || (i == 6) || (i == 7) || (i == 8) || (i == 9))
           {
                 cout << "\n 1. *it=" << *it;
                 collectTimeBegin << *it;
                 it++;
           }
           else if ((j == 0) || (j == 1) || (j == 2) || (j == 3) || (j == 4) || 
                    (j == 5) || (j == 6) || (j == 7) || (j == 8) || (j == 9))
           {
                 string     str = "0";

                 cout << "\n 2. *it=" << *it;
                 collectTimeBegin << str;
                 collectTimeBegin << *it;
                 it++;
            }
       }
 }
4

2 に答える 2

3

これが標準のC++を使用した解決策です。クリスチャンと同じアプローチを使用します。ダッシュに基づいて入力を分割し、欠落している数字を0で埋めます。

#include <string>
#include <sstream>
#include <algorithm>

int main()
{
    std::string date = "1992-9-12";

    std::replace(date.begin(), date.end(), '-', ' ');   // "1992 9 12"

    std::istringstream iss(date);
    int year = 0, month = 0, day = 0;

    if (iss.good()) iss >> year;    // 1992
    if (iss.good()) iss >> month;   // 9
    if (iss.good()) iss >> day;     // 12

    std::ostringstream oss;
    oss.fill('0');
    oss.width(4); oss << year;
    oss.width(2); oss << month;
    oss.width(2); oss << day;
    std::string convertedDate = oss.str();  // 19920912
}
于 2013-02-26T23:48:41.890 に答える
1

外部ライブラリを使用してもかまわない場合は、ブーストでこれを行います。

    string input = "1992-9-9";
    vector<string> v;
    boost::algorithm::split(v, input, boost::algorithm::is_any_of("-"));
    string output;
    BOOST_FOREACH(const string &s, v)
    {
        if (s.size() == 1)
        {
            output += "0"+s;
        } else {
            output += s;
        }
    }
    if (output.size() == 4)
        output += "0000"
    if (output.size() == 6)
        output += "00"

編集:入力文字列の長さが6桁または4桁しかない場合、大文字と小文字を区別するのを忘れました

于 2013-02-26T23:34:46.350 に答える