編集: 2 つの解決策があります。最初は数字をいじらずに (推奨)、2 つ目は (除算)。最初の解決策は次のとおりです。
#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
RUN SUCCESSFUL (合計時間: 54ms)
2番目(推奨されません)は次のとおりです。
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