zoukankan      html  css  js  c++  java
  • c++ ignore用法

    转自  http://blog.sina.com.cn/s/blog_4b3336c50102v45n.html

    std::cin.ignore() can be called three different ways:

    1.No arguments: A single character is taken from the input buffer and discarded:
    std::cin.ignore(); //discard 1 character
    2.One argument: The number of characters specified are taken from the input buffer and discarded:
    std::cin.ignore(33); //discard 33 characters
    3.Two arguments: discard the number of characters specified, or discard characters up to and including the specified delimiter (whichever comes first):
    std::cin.ignore(26, ' '); //ignore 26 characters or to a newline, whichever comes first




    举例:

    cin.ignore(1000, '
    ')的含义是把缓冲区内从当前字符开始知道'
    '之前字符(如果有1000个的话)忽略掉,实际上你这里假设一行不会超过1000个字符,所以含义是忽略一行
    ②新建个文件abc.txt,然后把下面这几句话拷贝到里面:
    the, quick, brown, fox, jumps, over, the, lazy, dog

    运行程序,输入"abc.txt"。注意,abc.txt这个文件,一定要跟你这个.cpp源文件在同一个目录里。
    infile.ignore(200,','); //跳过200个字符,直到遇到','为止,所以跳过了"the,"
    infile>>a; //读入一个字符串,即"quick,",因为默认情况下空格是读取分隔符
    infile.ignore(200,','); //跳过200个字符,直到遇到','为止,所以跳过了"brown,"
    infile>>b; //读入一个字符串,即"fox,",注意空格是分隔符
    infile.ignore(200,','); //跳过"jumps,"
    infile>>c; //读取"over,"
    最后的输出结果就是
    quick,
    fox,
    over,



    #include "stdafx.h"
    #include
    #include
    #include
    #include

    using namespace std;
    class Person{
        public:
            int id;
            string name;
            string age;
    };
    istream& operator>>( istream& is, Person& per ){
        is>>per.id && is.ignore() && getline(is,per.name,',') && is>>per.age;//ignore忽略掉一个字符,读完id后跳过1个字符
        return is;
    }
    ostream& operator<<(ostream& os, const Person& per){
        return os << per.id << ',' << per.name << ',' << per.age;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
        ifstream inFile("1.txt");
        if (!inFile){
            return -1;
        }

        vector personVec;

        for(Person per; inFile>>per;){
            personVec.push_back(per);
        }

        for(vector::iterator itor=personVec.begin(); itor!=personVec.end(); ++itor){
            cout << *itor << ' ';
        }
        cout << endl;


        return 0;
    }

    文本为:
    1001,xiaoming,30
    1002,Laoming,40
    1003,Dming,50

    若文本为
    1001-xiaoming-30  则需要getline(is,per.name,',')改为getline(is,per.name,'-')

    若文本为
    xiaoming-30,2 则需要getline(is,per.name,'-') && is>>per.age && is.ignore() && is>>per.id;

    若文本为
    IF1304,2014-12-23 09:15.500
    IF1305,2014-12-24 09:16.600
    IF1306,2014-12-25 09:17.700

    istream& operator>>( istream& is, Person& per ){
        //is>>per.id && is.ignore() && getline(is,per.name,'-') && is>>per.age;//ignore忽略掉一个字符,读完id后跳过1个字符
        //getline(is,per.name,'-') && is>>per.age && is.ignore() && is>>per.id;
        getline(is,per.inst,',') && is >> per.year && is.ignore() && is >> per.month && is.ignore() && is >> per.day && is.ignore()
            && is >> per.hour && is.ignore() && is >> per.min && is.ignore() && is >> per.tick;

        return is;
    }
    ostream& operator<<(ostream& os, const Person& per){
        return os << per.inst << ',' << per.year << '-' << per.month << "-" << per.day << " " << per.hour << ":" << per.min << "." <<per.tick;
    }
    其中类为
    class Person{
        public:
            string inst;
            int year;
            int month;
            int day;
            int hour;
            int min;
            int sec;
            int tick;
    };

    若文本为
    IF1305 455 33
    IF1304 4535 344
    IF1345 4553 35

    is >> per.inst >> per.year >> per.month;若文本中均为空格 则直接读就行,因为----cin自动过滤tab、空格、回车!!!

  • 相关阅读:
    使用 asp.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/heben/p/9544609.html
Copyright © 2011-2022 走看看