zoukankan      html  css  js  c++  java
  • Codeforce727B --- Bill Total Value(字符串处理 正则表达式)

    先说一下正则表达式

    %*[a-z]表示忽略前面的小写字符,%[0-9]表示把紧接着非字符的连续数字存入t字符串中去;

      从"abc123de4f"中得到"123";

    #include <stdio.h>
    int main()
    {
        char s[50] = "abc123de4f", t[50] = {0};
        sscanf(s, "%*[a-z]%[0-9]", t);
        printf("%s
    ", t);///结果: 123
        return 0;
    }
    

      从"Abc12.3de4f"中得到"12.3"

    #include <stdio.h>
    int main()
    {
        char s[50] = "Abc12.3de4f", t[50] = {0};
        sscanf(s, "%*[^0-9]%[0-9.]", t);
        printf("%s
    ", t);///结果: 12.3
        return 0;
    }
    

      

      从"2442932358@qq.com"中得到"@qq.com"

    #include <stdio.h>
    int main()
    {
        char s[50] = "2442932358@qq.com", t[50] = {0};
        sscanf(s, "%*[^@]%s", t);
        printf("%s
    ", t);///结果: @qq.com
        return 0;
    }
    

      从"2442932358@qq.com"中得到"qq.com"

    #include <stdio.h>
    int main()
    {
        char s[50] = "2442932358@qq.com", t[50] = {0};
        sscanf(s, "%*[^@]@%s", t);
        printf("%s
    ", t);///结果: 12.3
        return 0;
    }
    

      还有很多可以慢慢尝试;

    题目链接:http://codeforces.com/contest/727/problem/B

    题意:有一个采购单以字符串的形式给出,里面按顺序包括“物品名+价钱”,没有“+”号,物品名是由小写英文字符组成,价钱有两种形式,带美分的和不带美分的,其中带美分的是由小数点加两位数字构

    的,美元部分则由小数点每隔3位分开一次,例如123.45表示123.45美元,12.345表示12345美元,1.234.45表示1234.45美元,现在要求所有物品的价格之和

    输出格式按照输入格式来处理;

    输出格式有两种:

    1. 全是整数的,没有.00这种形式

    2. 有小数部分的,小数部分不为0的保留两位小数;

    #include <stdio.h>
    #include <string.h>
    #define N 5200
    int main()
    {
        char s[N]={0}, next[N]={0}, p[N]={0}, t[N] = {0};
    
        while(scanf("%s", s+1) != EOF)
        {
            s[0] = 'a';///以下正则表达式的规则是以字符开头,数字结尾的;
            double sum = 0;
            int f = 0;
            ///正则表达式求s串中从前面开始的数字部分以字符串的形式存入p中,剩余部分存入next中;
            ///
            while(sscanf(s, "%*[^0-9]%[0-9.]%[^]", p, next) > 0)
            {
                double num1 = 0, num2 = 0;///num1是小数部分的值,num2是整数部分的值;
                int len = strlen(p), flag = 0;
                if(len>3 && p[len-3] == '.')
                {
                    sscanf(p+len-3, "%lf", &num1);///把小数部分转化成double;
                    flag = f = 1;///说明是2位小数;
                }
                if(flag == 1) len = len - 3;
                for(int i=0; i<len; i++)///处理整数部分;
                {
                    if(p[i] == '.') continue;
                    num2 = num2*10 + (p[i]-'0');
                }
                sum += num1 + num2;
    
                strcpy(s, next);///循环处理剩余部分;
                memset(next, 0, sizeof(next));///要清空的;
            }
    
            sprintf(t, "%.2f", sum);///再把结果保存为字符串,方便输出;
    
            int len = strlen(t), k = 0;
            char ans[N];///保存结果;
    
            if(f == 0)len -= 3;///没有小数部分的;
            if(f == 1)///2位小数;
            {
                ans[k++] = t[--len];
                ans[k++] = t[--len];
                ans[k++] = t[--len];
                if(ans[0] == '0' && ans[1] == '0')k = 0;///小数部分为0的,不输出;
            }
    
            for(int i=len-1, counts=1; i>=0; i--,counts++)
            {
                if(counts%3==1 && counts!=1)
                    ans[k++] = '.';
                ans[k++] = t[i];
            }
            for(int i=k-1; i>=0; i--)
                printf("%c", ans[i]);
            printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    在redhat 6.6上安装Docker
    Linux操作系统各版本ISO镜像下载(包括oracle linux edhatcentosu
    UML时序图(Sequence Diagram)学习笔记
    eureka 和zookeeper 区别 优势【转】
    HttpClient实现远程调用
    Java 1.8 Stream 用例测试
    ZooKeeper下载安装(Windows版本)
    Java1.8新特性
    mysql大数据量表索引与非索引对比
    druid监控mysql程序
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5992444.html
Copyright © 2011-2022 走看看