/ / C ++ एक्स्ट्रेन्डिंग को निकालें और विशिष्ट दिनांक प्रारूप में बदलें - c ++, regex, date, date-formatting

C ++ एक्स्ट्रेन्डिंग को निकालें और विशिष्ट दिनांक प्रारूप में बदलें - c ++, regex, date, date-formatting

मेरे पास तारीखों का एक समूह है जिसे मैं C ++ के माध्यम से YYYYMMDD प्रारूप में बदलना चाहता हूं। मेरे पास वर्तमान में निम्नलिखित कोड है जो इसे लिनक्स तिथि कमांड के माध्यम से चलाता है:

      string shell_arg = inputStr;
shell_arg = """ + shell_arg + """;
string cmd="date -d " + shell_arg +  " +%Y%m%d 2>/dev/null";

FILE *ls = popen(cmd.c_str(), "r");
char retval[100];
fgets(retval, sizeof(retval), ls);

pclose(ls);

if(!isdigit(retval[0]))
{
strcpy(retval,"99991231");
}

return retval;

यह अधिकांश दिनांक स्वरूपों को संभालता है, और जो "99991231" वापस नहीं किया जा सकता है। मेरे पास प्रारूप की कई तिथियां हैं।

"Sep- 13"
"12 -Oct"
"13-Nov"

प्रत्येक वर्ष के लिए महीने के पहले का मूल्यांकन करना चाहिए

20130901
20121001
20131101

क्रमशः। आप इसे कैसे पूरा करेंगे? मुझे ध्यान देना चाहिए, यदि हम regex का उपयोग करने जा रहे हैं, तो मेरा कॉन्फ़िगरेशन केवल GNU C लाइब्रेरी का उपयोग कर सकता है (जो regex_match के विपरीत, regexec और regcomp का उपयोग करता है)।

उत्तर:

जवाब के लिए 0 № 1

चूंकि आपका इनपुट कई प्रारूपों में हो सकता है, इसलिए मैं एक साधारण स्टेट मशीन का सुझाव देता हूं। राज्य मशीन आपको एक अलग पैटर्न का बैकअप लेने और पुन: प्रयास करने की अनुमति देगा।

उपयोग std::getline तारीख को पढ़ने के लिए std::string प्रकार।

आप उपयोग कर सकते हैं std::istringstream डेटा पार्स करने के लिए।