C++ 从成对向量中的字符串中提取月份

C++ 从成对向量中的字符串中提取月份,c++,vector,std-pair,C++,Vector,Std Pair,我有一对向量日期和付款,如下所示: std::vector<std::pair<std::string, double>> payments = { {"8/18", 0.0}, {"7/18", 771.98}, {"6/18", 0.0}, {"5/18", 771.98}, {"4/18", 771.98}, {"3/18", 771.98}, {"2/18",

我有一对向量日期和付款,如下所示:

std::vector<std::pair<std::string, double>> payments = { {"8/18", 0.0}, {"7/18", 771.98}, {"6/18", 0.0}, {"5/18", 771.98},
                                                    {"4/18", 771.98}, {"3/18", 771.98}, {"2/18", 0.0}, {"1/18", 3859.90},
                                                    {"12/17", 771.98}, {"11/17", 0.0}, {"10/17", 1543.96}, {"9/17", 771.98} };
我试着这样做:

std::vector<int> paymentMonths;
for (auto it : payments)
{
    paymentMonths.push_back(it.first[0] - '0');
}

所以问题是当我到了12月、11月和10月的时候。有人知道如何解决这个问题吗?

因为您的某些月份有多个数字表示它们,您需要做的是获取日期字符串中只有月份部分的子字符串,然后您可以使用
stoi
将其转换为整数。那会让你看起来像

std::vector<int> paymentMonths;
for (auto it : payments)
{
    paymentMonths.push_back(std::stoi(it.first.substr(0, it.first.find("/"))));
}
std::vector paymentMonths;
用于(自动it:付款)
{
paymentMonths.push_back(std::stoi(it.first.substr(0,it.first.find(“/”));
}

您能更详细地说明您的问题吗。发布一篇文章,根据这里的要求再现您遇到的问题。@πάνταῥεῖ 通过示例编辑为什么要将日期存储为字符串,而不是可以处理所有时间细节的日期/时间类?请详细说明问题。问题不在于vector,因为您已经正确获取了字符串。问题是获取由斜杠分隔的字符串并获取第一个令牌。为什么不使用映射从月份字符串获取月份整数?@snorlaxxx欢迎您。请注意,我没有在这篇文章中包含错误检查。如果字符串的格式可能不是
“xx/yy”
,则可能会导致问题。
8 7 6 5 4 3 2 1 1 1 1 9
std::vector<int> paymentMonths;
for (auto it : payments)
{
    paymentMonths.push_back(std::stoi(it.first.substr(0, it.first.find("/"))));
}