码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforce727B --- Bill Total Value(字符串处理 正则表达式)

时间:2016-10-24 13:40:18      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:处理   保存   包括   closed   输出   one   next   nts   字符   

先说一下正则表达式

%*[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\n", 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\n", 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\n", 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\n", 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.]%[^\0]", 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("\n");
    }
    return 0;
}
View Code

 

Codeforce727B --- Bill Total Value(字符串处理 正则表达式)

标签:处理   保存   包括   closed   输出   one   next   nts   字符   

原文地址:http://www.cnblogs.com/zhengguiping--9876/p/5992444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!