我正在尝试创建一个包含数字的String
数组。这些数字是我需要访问的文件夹的名称。目前我宣布它如下所示:
String str1[] = { "001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "011", "012", "013", "014", "015", "016", "017", "018", "019", "020", };
我有124个文件夹,并以这种方式命名它们是乏味的。有一个更好的方法吗?我正在使用C ++。
答案 0 :(得分:5)
您可以使用字符串流并设置格式选项以将整数填充到特定数量的字符并设置填充字符。
编辑:好的,我的代码不是从1开始,而是0,但我相信你可以解决这个问题:)
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <vector>
using namespace std;
int main()
{
std::vector<std::string> strs;
for (int i = 0; i < 124; i++)
{
std::ostringstream os;
os << std::setfill('0') << std::setw(3) << i;
strs.push_back(os.str());
}
for (const auto& s : strs)
{
std::cout << s << "\n";
}
}
答案 1 :(得分:0)
使用stringstream和for循环。
示例:
uint32_t t150()
{
std::vector<std::string> strVec; // i.e. String str1[]
for (int i=1; i<125; ++i)
{
std::stringstream ss;
ss << std::setw(3) << std::setfill('0') << i;
strVec.push_back(ss.str());
}
for (int i=0; i<124; ++i)
std::cout << strVec[i] << std::endl;
return(0);
}
另一种选择是:
std::string t150b(int i) {
std::stringstream ss;
ss << std::setw(3) << std::setfill('0') << i;
return (ss.str());
}
// not tested, and no range check
返回值i的格式化字符串...我想你在某些更高级别的代码中有循环。
另一个选择是跳过向量,只需在...之间用空格构建字符串...然后像获取任何文件项一样获取它们...
void t150c(std::stringstream& ss)
{
for (int i=1; i<125; ++i) {
ss << std::setw(3) << std::setfill('0') << i << " ";
// white space between values -------------------^^
}
}
用法示例:
{
std::stringstream ss;
t150c(ss); // 'fill' stream with desired strings
do {
if(ss.eof()) break;
std::string s;
ss >> s; // extract string one at a time
std::cout << s << std::endl; // and use
}while(1);
}
答案 2 :(得分:0)
std::string str1[124];
for(int i = 1; i <= 124; i++){
str1[i-1] = convertTo3Digit(i);
}
然后只需编写convertTo3Digit
函数来获取数值并将其格式化为3位数字符串。
另一种不太优雅的方法是将excel中的列格式化为三位数字并生成001-124,然后复制粘贴到静态初始化程序中。您可以使用正则表达式添加引号和逗号。