青训营-数字字符串格式化

259 阅读1分钟

数字字符串格式化

问题描述

小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。


测试样例

样例1:

输入:s = "1294512.12412"
输出:'1,294,512.12412'

样例2:

输入:s = "0000123456789.99"
输出:'123,456,789.99'

样例3:

输入:s = "987654321"
输出:'987,654,321'

解题思路

见代码

算法实现

#include <string>
#include <iostream>

std::string solution(const std::string& s) {
    // write code here
    std::string result;
    //删除无用的0
    int i=0;
    while(s[i]=='0'){
        i++;
    }
    std::string temp=s.substr(i);
    int sum;
    //求整数部分的个数
    int e=temp.find('.');
    if(e!=-1){
        sum=temp.find('.');
    }else {sum=temp.length();}
    //计算出要添加多少个','
    int r=sum%3;
    if(sum%3==0){
        sum=sum/3-1;
    }else sum=sum/3;
    //为字串添加','同时r也记录了添加了几个字符
   if(r!=0){
     sum=sum-1;
     result=result+temp.substr(0,r)+',';
   }
    for(int i=0;i<sum;i++){
         result=result+temp.substr(r,3)+',';
         r=r+3;  
    }
    //加上后面的部分
     result=result+temp.substr(r);
    
    return result;
}

int main() {
    std::cout << (solution("1294512.12412") == "1,294,512.12412") << std::endl;
    std::cout << (solution("0000123456789.99") == "123,456,789.99") << std::endl;
    std::cout << (solution("987654321") == "987,654,321") << std::endl;
}