私はプログラムを書いているので、ファイルから日付を読み込む必要があります。日付は年、月、日です。どのようにすべての日付情報を読む必要がありますか?いくつかの例を挙げることができますか?C + +での文字列[Anjuta IDEを使用]
答えて
まず、値を保持する構造体が必要です。標準的な構造体tmがありますが、これにはメンバーがたくさんあり、その中のいくつかは他のメンバーに依存しており、昨日がwdayとmdayに適合しない場合は混乱します。
struct Date {
int year;
int month;
int day;
};
次に、データを構造体に読み込む機能が必要です。最初にファイルを開き、最初の行を読み、処理する必要があります。これを達成するために、ファイルを読み込むためのC++の標準クラスであるifstreamを使用することができます。
std::ifstream f(fileName.c_str());
次に、日付が格納されている行を読み取る必要があります。演習であるので、最初の演習であると思いました。 getline()
は、入力から1行全体を読み取り、前に作成した文字列に格納します。
std::string line;
std::getline(f, line);
最後に、その行を処理する必要があります。これを達成するための多様な方法がありますが、おそらくC++の中で最も快適なのは、文字列に関連するストリームを使用し、各フィールドをその型で読み取ることです。
std::istringstream str(line);
str >> date.year
>> firstDot
>> date.month
>> lastDot
>> date.day
;
エラーチェックについては、さまざまな確認ができます(私はあなたに任せます)。最低でも、セパレータとして読み取ったドットがあることを確認しなければなりません。ここで
if (firstDot != '.'
|| lastDot != '.')
{
date.year = date.month = date.day = -1;
}
、全体の機能である:あなたが見ることができるように
bool readDate(const std::string &fileName, Date &date)
{
char firstDot;
char lastDot;
std::ifstream f(fileName.c_str());
bool toret = false;
date .year = date.month = date.day = -1;
if (f.is_open()) {
std::string line;
// Read line containing the date
std::getline(f, line);
// Chk string
std::istringstream str(line);
str >> date.year
>> firstDot
>> date.month
>> lastDot
>> date.day
;
if (firstDot != '.'
|| lastDot != '.')
{
date.year = date.month = date.day = -1;
}
else toret = true;
}
return toret;
}
、エラー条件が関数の戻り値によって通知されるだけでなく、構造体日の内容。
これが役に立ちます。
お時間をいただき、すべての詳細を説明していただきありがとうございます。私は試してみます – gedO
strptimeを使用することをお勧めします。私はあなたが日付を持つために探している内部形式がわからないが、これはあなたのために動作するはずです。エラーチェックは行われないことに注意してください。
struct tm tm;
time_t t;
strptime("%Y:%m:%d", &tm);
printf("year: %d; month: %d; day: %d;\n",
tm.tm_year, tm.tm_mon, tm.tm_mday);
t = mktime(&tm);
「。」で文字列を分割することもできます。データを変数に入れます(たとえば、配列など)。
次に、それらを組み合わせて独自の形式と文字列を作成できます。
あなたがC++ 0xのはstd :: libに(あまりにも最近である必要はありません)、ここでは無料ですライブラリソリューションだ、簡単かつ小型(1元、1ヘッダ)をお持ちの場合:
http://howardhinnant.github.io/date.htmlここで
は使用例は次のとおりです。
#include "date.h"
#include <iostream>
#include <sstream>
int main()
{
using namespace gregorian;
date d;
std::istringstream in("2011.02.07");
in >> date_fmt("%Y.%m.%d") >> d;
if (in.fail())
std::cout << "failed\n";
else
std::cout << date_fmt("%A %B %e, %Y") << d << '\n';
}
出力:
Monday February 7, 2011
構文Cのstrftime関数に従います。また、日付ライブラリにはC++ 0xヘッダー<cstdint>
が必要で、2006年に追加されたtime_get
にいくつかの追加が必要です。
このライブラリは廃止されました。それは
ブーストの使用は答えです。
This questionは本当に良い答えですが、あなたの問題には正確ではありません。
#include <fstream>
#include <iostream>
#include <string>
#include <boost/date_time.hpp>
using std::cout;
using std::cin;
using std::endl;
using std::string;
namespace bt = boost::posix_time;
int main()
{
string dd=" 12 December 2011 15:00:42";
//string dd="December 2011 15:00:42";
cout<<dd<<endl;
std::stringstream time1is(dd);
std::locale dForm = std::locale(std::locale::classic(),new bt::time_input_facet("%d %B %Y %H:%M:%S"));//12 December 2011 15:00:42
time1is.imbue(dForm);
bt::ptime t1;
if ((time1is>>t1).fail()) {
std::cerr<<"error while parsing "<<dd<<std::endl;
}else{
std::cerr<<"success!! "<<dd<<std::endl;
}
cout<<t1<<endl;
}
//char c; cin >> c;
return 0;
}
- 1. C++での文字列ライブラリの使用
- 2. protobuf-Cでの文字列の使用
- 3. 分割コマンドのstd ::文字列を使用してC++で文字列:: substrは
- 4. VB6の文字列配列をC#で使用する
- 5. Netbeans IDEを使用してjTree Javaで文字列値を取得する
- 6. Cプラクティステスト用文字と文字列
- 7. セレンideを使用してURLの文字列をチェックする方法
- 8. 文字列配列を使用したソート関数 - Cのエラー
- 9. 文字列C#の
- 10. C#のテキストボックスで部分文字列を使用する
- 11. C++の文字列でバイナリデータを使用する
- 12. C++文字列
- 13. 文字列のC#
- 14. C++チュートリアルで文字列の配列が文字列に使用されているのはなぜですか?
- 15. C++文字列
- 16. C++を使用して行単位で文字列を読む
- 17. C#での文字列分割とFileSystemEventArgs引数の使用
- 18. C#で文字列をシフト
- 19. VB6 IDEで長い文字列の完全な値を確認
- 20. ベクトル文字列文字列の途中で置換C++
- 21. C#string.split()別の文字列(大文字)
- 22. C++で文字列にqsortを使用する方法
- 23. Windows8 - C#でローカライズされた文字列を使用する
- 24. C#designer.csコードで定数文字列を使用するには?
- 25. C++インラインアセンブリコードで文字列を使用するには?
- 26. データベースで文字列リソースを使用するC#
- 27. C#文字列を分割してIfステートメントで使用
- 28. C#の文字列
- 29. Cの文字列の配列の文字列をチェックする
- 30. PowerShell 1.0のタブ文字で文字列分割を使用
日付はどのような形式ですか? – robert
日付書式: "YYYY.mm.dd" – gedO