要实现的效果:
9999999==》9,999,999
相隔几位和插入的字符是可控的。
1.将数字转化为字符数组
2.新建一个vector存储数字字符
3.翻转整个字符vector
4.根据插入的位置,插入要插入的字符,存储在一个新的vector中
5.翻转新的vector
6.插入'\0'结束字符
7.检测第一个字符是不是插入字符,如果是,删除
8.将vector转化为字符串
9.这个是有位数限制的,我这边最多是10位,但是游戏中用是够了,不够的话就该num的类型吧!
代码:
std::string SFUtils::num2StrWidthChar(int num, int place, char ch)
{
std::string result;
char t[256];
if (num < pow(10, place))//这一部分代码可有可无
{
sprintf_s(t, "%d", num);
result = t;
return result;
}
//将数字转化为字符数组
sprintf_s(t, "%d", num);
std::vector<char> charVec;
//将字符数组输出到vector中,只取有用的字符
for (int i = 0; i < 256;i++)
{
if (t[i] == '\0')//字符串结尾
{
break;
}
charVec.push_back(t[i]);
}
//第一次翻转字符
for (int i = 0; i < charVec.size() / 2; i++)
{
int left = i;
int right = (charVec.size() - 1) - i;
std::swap(charVec[left], charVec[right]);
}
//插入ch
std::vector<char > resChar;
for (int i = 0; i < charVec.size();i++)
{
resChar.push_back(charVec[i]);
if ((i + 1) % place == 0)
{
resChar.push_back(ch);
}
}
//第二次翻转字符
for (int i = 0; i < resChar.size() / 2; i++)
{
int left = i;
int right = (resChar.size() - 1) - i;
std::swap(resChar[left], resChar[right]);
}
//加入最后的字符
resChar.push_back('\0');
//如果第一个是间隔符号,删除
if (resChar[0] == ch)
{
resChar.erase(resChar.begin());
}
//转换为字符串
char *ppp = new char[resChar.size()];
for (int i = 0; i < resChar.size(); i++)
{
ppp[i] = resChar[i];
}
result = ppp;
delete[] ppp;
return result;
}
//使用示例
std::string str =SFUtils::num2StrWidthChar(829393, 3, ',') ;