字符串格式

字符串格式

1. 题目地址

    https://www.acwing.com/problem/content/1475/

2. 题目解析

img

    根据上述图片,我们可以发现:给定一个数字12345,我们需要做的就是从后往前每三位添加一个逗号,添加完逗号之后,再进行输出。
    需要注意的是,如果数字不足四位,则不需要添加逗号。

3. 题解

    当我们在处理有关字符串的问题时,通常有两种解决思路:
        1. 使用C++中的string数据类型,string类型内部提供了很多的API,以至于我们可以很方便的处理字符串问题。(80%)
        2. 使用char[]来解决。(20%)需要注意的是:如果有些题目对于时间复杂度有着非常高的要求,那么使用char[]要比string效率更高。
    这道题的解决思路如下:
        1.  输入ab2.  将ab相加。
        3.  将a+b转换成字符串。
        4.  往字符串中添加逗号,最后输出即可。 
    需要注意的就是:将a+b转换成字符串时,我们可以使用C++11中的函数to_string()。该函数可以把整数或浮点数均转换为字符串。
    如果我们不想用to_string()函数的话,我们就需要手动实现将数字转换成字符串的过程。具体思路如下:
        1.  初始化一个string类型的字符串res。
        2.  取出数字的个位(%10),将个位转换成字符(加上'0'),添加到res的前面。
        3.  将数字本身除10,继续上述过程,当数字为0时,转换结束。
    在上述过程中,我们需要考虑数字为负数和数字为0的情况。如果数字为0,那么字符串直接转换成"0"即可。如果数字为负数,我们需要将数字取绝对值之后,再进行转换,最后添加负号即可。

4. 代码

//  to_string()版本
#include <iostream>
#include <cstdio>

using namespace std;

int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    int number = a+b;
    //使用to_string函数,将其转换成字符串
    string str_number = to_string(number);
    //存储结果
    string res = "";
    //添加逗号
    //j用来控制每几位输出逗号
    for( int i = str_number.size() - 1 , j = 0; i >= 0; i-- ){
        res = str_number[i] + res;
        j++;
        if( j % 3 == 0 && i && str_number[i - 1] != '-' ){
            res = ',' + res;
        }
    }
    cout << res << endl;
    return 0;
}
//  手动实现转换
#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;


int main(){
    
    int a,b;
    scanf("%d%d",&a,&b);
    int sum = a + b;
    string str_number = "";
    int number = abs(sum);
    //手动将数字转换成字符串
    if(number == 0){
        str_number = "0";
    }
    while(number){
        str_number = char(number % 10 + '0') + str_number;
        number /= 10;
    }
    if(sum < 0){
        str_number = '-' + str_number;
    }
    string res = "";
    
    for(int i = str_number.size() - 1,j = 0; i >= 0; i--){
        res = str_number[i] + res;
        j++;
        if(j % 3 == 0 && i && str_number[i - 1] != '-'){
            res = ',' + res;
        }
    }
    
    cout << res << endl;
    
    return 0;
}
    作者:gao79138
    链接:https://www.acwing.com/
    来源:本博客中的截图、代码模板及题目地址均来自于Acwing。其余内容均为作者原创。
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @   夏目^_^  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
点击右上角即可分享
微信分享提示