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\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;
}

  

  从"[email protected]"中得到"@qq.com"

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

  从"[email protected]"中得到"qq.com"

#include <stdio.h>
int main()
{
    char s[50] = "[email protected]", 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;
}

时间: 2024-11-08 00:57:39

Codeforce727B --- Bill Total Value(字符串处理 正则表达式)的相关文章

【转】字符串和正则表达式

System.String是一个功能非常强大且用途非常广泛的基类,但它不是.NET中唯一与字符串相关的类,特别是System.Text和System.Text.RegularExpressions命名空间中的类.本文主要介绍内容: 1.创建字符串 2.格式化表达式 3.正则表达式一.System.String类 System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作. 例如: string messsage1 = "Hello"; // return &quo

R5&mdash;字符串处理/正则表达式

R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的,因为它甚至可以直接使用Perl的正则表达式,这也是R的一个理念,作为语言就把向量计算做到极致,作为环境,就在各领域都集成最好的.R中有grep系列的函数,可以用最强大的方式处理字符串的所有问题. grep的全称是global search regular expression and print

Ruby中字符串与正则表达式的问题

Ruby的正则表达式为Regexp类的对象 主要的元语言字符 記号 意味 例 説明 ^ 行頭 /^abc/ abcで始まる行 $ 行末 /abc$/ abcで終わる行 . 任意の1文字 /a.b/ aとbの間に1文字 [...] []内のいずれか1文字 /[A-Za-z]/ 英字 [^...] []内に含まれない1文字 /[^0-9]/ 数字以外 * 0回以上の繰り返し /a.*/ aまたはaで始まる + 1回以上の繰り返し /a+/ 1回以上のaの繰り返し ? 0回または1回 /aa?/ aま

groovy入门 第03章 字符串和正则表达式

字符串和正则表达式 3.1字符串字面值 可以使用单引号.双引号.三引号来封装字符串. 使用单引号封装的字符串就是字符串序列本身. 使用双引号可以嵌套单引号,并可以将表达式包含进来. 使用三引号可以包含多行文本. def age=25 'My age is ${age}'            // 输出My age is ${age} "My age is ${age}"           //输出My age is 25 """'My age is $

第5章 字符串及正则表达式

第5章 字符串及正则表达式 5.1 字符串常用操作 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串.截取字符串.格式化字符串等.下面将对Python中常用的字符串操作方法进行介绍. 5.1.1 拼接字符串 使用“+” 运算符可完成对多个字符串的拼接,“+” 运算符可以连接多个字符串并产生一个字符串对象. 例如,定义两个字符串,一个保存英文版的名言,另一个用于保存中文版的名言,然后使用“+” 运算符连接,代码如下: mot_en = 'Remembran

Python字符串和正则表达式中的反斜杠(&#39;\&#39;)问题

在Python普通字符串中 在Python中,我们用'\'来转义某些普通字符,使其成为特殊字符,比如 In [1]: print('abc\ndef') # '\n'具有换行的作用 abc defg In [2]: print('abc\tdef') # '\t'具有制位符的作用 abc defg 我们还可以用'\'来转义特殊字符,使其成为普通字符,比如 In [3]: print('abc\\tdef') # 使'\'成为一个普通的字符,没有转义作用 abc\tdef In [4]: prin

Python基础要点:字符串和正则表达式中的反斜杠(‘\‘)问题详解

给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下. 在Python普通字符串中 在Python中,我们用'\'来转义某些普通字符,使其成为特殊字符,比如 1 In [1]: print('abc\ndef') # '\n'具有换行的作用 2 abc 3 defg 4 5 In [2]: print('abc\tdef') # '\t'具有制位符的作用 6 abc defg 我们还可以用'\'来转义特殊字符,使其成为普通字符,比如 1

C#语言基础-10 字符串和正则表达式

字符串和正则表达式  System.String类    System.String是一个专门用于存储字符串的类,,允许对字符串进行很多操作. 重复修改给定的字符串,效率会很低,因为字符串实际是一个不可变的数据类型,一旦对字符串对象进行初始化,该字符串对象就不能改变了.所以对字符串进行的修改实际上是创建一个新的字符串,然后把就的字符串内容复制到新的字符串中.如: string str="Hello!"; 执行这段代码时,创建一个字符串对象,并把它初始化为"Hello"

Python学习笔记5(字符串与正则表达式)

1.字符串 1.1字符串的格式化 #格式化语法 "%s" % str1 "%s %s" % (str1,str2) #格式化字符串 str1 = "version" num = 1.0 format = "%s" % str1 print (format) format = "%s %d" %(str1, num) print (format) #使用字典格式化字符串 print ("%(vers