是否可以使用循环从字符串数组中创建整数变量?C++



例如,我有一个日期字符串,我想把每个字符串的日期和月份分开,然后把它们转换成整数。类似以下内容:

string dateArray[10] = {"03/02/2020", "04/02/2020", "04/02/2020", "05/02/2020", "11/02/2020"};
string date1 = dateArray[0]; 
string day1 = date1.substr(0,2);  
string mth1 = date1.substr(3,2);  
int d1 = stoi(day1);  
int m1 = stoi(mth1);

结果是d1=3并且m1=2。

我想在更长的日期数组中重复这个过程,这意味着如果我手动执行上述操作,我会有很多复制的代码。我想知道是否有更好的方法?谢谢

您可以使用std::array和基于范围的循环:

std::array<std::string, 10> dateArray = {"03/02/2020", "04/02/2020", "04/02/2020", "05/02/2020", "11/02/2020"};
for (auto const &date : dateArray) {
auto day1 = date.substr(0,2);  
auto mth1 = date.substr(3,2);  
int d1 = stoi(day1);  
int m1 = stoi(mth1);
}

请注意,您指定的数组大小为10,并且只提供5个字符串用于初始化。剩下的5个字符串将默认构造,并将变为空字符串。可以。不可以的是,在空字符串上调用substr(3,2(将导致抛出异常(std::out_of_range(。

您必须使大小为5的数组成为std::array<std::string,5>,或者提供10个字符串来初始化它

解决方案适用于循环。在for循环中,有一个正在运行的索引,它是一个递增多次的变量。

在这里的数组操作中:string date1 = dateArray[0];,您正在访问元素0处的数组,然后进行处理。现在,您所要做的就是对元素0、1、2、3执行此操作…这就是for循环的用武之地,它允许您使用一个变量,通常称为i,它从0到您想要的某个值。对于您的代码,它看起来像这样:

string dateArray[10] = {"03/02/2020", "04/02/2020", "04/02/2020", "05/02/2020", "11/02/2020"};
for(int i = 0; i < 10; i++) {
string date1 = dateArray[i]; 
string day1 = date1.substr(0,2);  
string mth1 = date1.substr(3,2);  
int d1 = stoi(day1);  
int m1 = stoi(mth1);
}

注意for循环中的10,如果你想对数组的每个元素进行此操作,这应该与数组的大小相同

最新更新