编辑:我有两个解决方案。第一个不玩数字(推荐)和第二个(除法)。第一个解决方案是:
#include <cstdlib>
#include <iostream>
#include <locale>
#include <string>
using namespace std;
struct my_facet : public std::numpunct<char>{
explicit my_facet(size_t refs = 0) : std::numpunct<char>(refs) {}
virtual char do_thousands_sep() const { return ','; }
virtual std::string do_grouping() const { return "\003"; }
};
/*
*
*/
int main(int argc, char** argv) {
cout<<"before. number 5000000: "<<5000000<<endl;
std::locale global;
std::locale withgroupings(global, new my_facet);
std::locale was = std::cout.imbue(withgroupings);
cout<<"after. number 5000000: "<<5000000<<endl;
std::cout.imbue(was);
cout<<"and again as before. number 5000000: "<<5000000<<endl;
return 0;
}
前。数字 5000000: 5000000
之后。数字 5000000: 5,000,000
和以前一样。数字 5000000: 5000000
运行成功(总时间:54ms)
第二个(不推荐)是:
double f = 23.43;
std::string f_str = std::to_string(f);
或这个
int a = 1;
stringstream ss;
ss << a;
string str = ss.str();
然后你可以使用string::substr()
string::find()
string::find_first_of()
和类似的方法来修改和格式化你的字符串。
类似的话题
如果你真的想要(必须)划分:(我认为我的版本比其他版本更干净、更高效)
unsigned long long userInput;
std::stringstream ss,s0;
std::string nr;
std::cout << "Enter a long long number: " << std::endl;
std::cin >> userInput;
int input=userInput;
int digits;
while(input>999){
input=input/1000;
digits=userInput-input*1000;
int mdigits=digits;
while(mdigits<100){s0<<"0";mdigits*=10;}
std::string s=ss.str();
ss.str("");
ss<<","<<s0.str()<<digits<<s;
userInput=input;
s0.str("");
}
std::string sf=ss.str();
ss.str("");
ss<<input<<sf;
std::cout << "Your Number: " << userInput << ";" << digits <<";"<<ss.str()<<std::endl;
输入一个长长的号码:12345678 您的号码:12;345;12,345,678