zoukankan      html  css  js  c++  java
  • 题目1010:A + B(字符串拆分)

    问题来源

      http://ac.jobdu.com/problem.php?pid=1010

    问题描述

      给我们一行标准的字符串,整行读入之后,把它拆开转换成数字进行计算。

    问题分析

      首先考虑一个问题:如何整行读入字符串?为此我特地写了一篇博客来解释,如何使用各种方法整行读入字符串,请参考:http://www.cnblogs.com/AlvinZH/p/6798023.html

      本题的难点在于拆开字符串。由于在C/C++里面是没有spilit函数的,但是它有strtok函数,我们可以自己协议标准的spilit函数。
    字符串分割strtok函数详解:http://blog.csdn.net/mycwq/article/details/14648011

      在代码中我自定义了一个spilit函数,以后可以用这个当做模板函数来用!

    参考代码

    //
    // Created by AlvinZH on 2017/4/30.
    // Copyright (c) AlvinZH. All rights reserved.
    //
    
    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    using namespace std;
    
    vector<string> split(string& str,const char* c)
    {
        char *cstr,*p;
        cstr = new char[str.size()+1];
        strcpy(cstr,str.c_str());
    
        vector<string> res;
        p = strtok(cstr,c);
        while(p!=NULL)
        {
            res.push_back(string(p));
            p = strtok(NULL,c);
        }
        delete[] cstr;
    
        return res;
    }
    int wordTOnum(string s)
    {
        if(s=="zero") return 0;
        else if(s=="one") return 1;
        else if(s=="two") return 2;
        else if(s=="three") return 3;
        else if(s=="four") return 4;
        else if(s=="five") return 5;
        else if(s=="six") return 6;
        else if(s=="seven") return 7;
        else if(s=="eight") return 8;
        else if(s=="nine") return 9;
    }
    
    int main()
    {
        int x,y;
        bool afterAdd;
        string str;
        const char *delims=" ";
        while(getline(cin,str))
        {
            x=y=0;
            afterAdd=false;
            vector<string> s;
            s=split(str,delims);
    
            if(s[0]=="zero"&&s[2]=="zero") break;
    
            int len=s.size();
            for(int i=0;i<len-1;i++)
            {
                if(s[i]=="+") afterAdd=true;
                else
                {
                    if(afterAdd) x=x*10+wordTOnum(s[i]);
                    else y=y*10+wordTOnum(s[i]);
                }
            }
            cout<<x+y<<endl;
        }
    }

    作者: AlvinZH

    出处: http://www.cnblogs.com/AlvinZH/

    本人Github:https://github.com/Pacsiy/JobDu

    本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

  • 相关阅读:
    【第36题】2019年OCP认证12C题库062考试最新考试原题
    004 基本命令 touch cp mv 命令
    003 基本指令 mkdir rm -rf(暴力删除)
    002 文件目录类的指令 cd ls
    001 指定运行级别
    005 抽象工厂模式
    006 使用类加载器加载资源文件
    004 方法反射
    003 属性反射
    003 工厂方法模式
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/6790325.html
Copyright © 2011-2022 走看看