杂篇之3-C++的输入与输出

1.C++/C输入输出常用函数

两个函数:

  • cin ,与c 中的scanf类似
    • 特点:遇tab,space,Enter即结束输入(scanf一样)
  • getline,与 c中的gets(char *s)类似
    • 特点:读入一行文本,遇到换行符结束,但是并不保存换行符;如果输入第一个字符即\n则输入为空字符串

2.输入多行char类型字符,行数不定

例子如下:

abcdfr
acdf
acv

目标: 读入一行字符串,进行处理,而后再读入下一行字符串

代码:

    cout<<"实验1:使用getline函数"<<endl; 
    while(1)
    {
        string L;
        while(getline(cin,L) && L.size()!=0)  
        {
            stringoperator(L) // 对L进行处理
        } 
        if(L.size()==0) 
        {
            break;
        }

    } 

    cout<<"实验2:使用gets()函数"<<endl;

    while(1)
    {
        char str[81];
        while(gets(str)&&str[0]!='\0')
        {
            string L(str);
            stringoperator(L) // 对L进行处理
        }
        if(str[0]=='\0')
            break;  
    } 

3.读入多行数据,行数不定,且每一行输入中包含多个字符串,以空格相间隔

输入实例:

abc acd bcdef abcdefg
abc a
def a cdf

目标:将每一行的输入按照空格提取出其中包含的字符片段,存储进vector<string> vstr中,如上例第一行存储在vstr中,则结果如下:

vstr[0]存储的是abc
vstr[1]存储的是acd
vstr[2]存储的是bcdef
vstr[3]存储的是abcdefg:

基本思路

  • 输入行
  • 按照空格对这一行数据进行切割

代码:

    while(1)
    {
        vector<string> vstr;
        string L;
        getline(cin,L);
        if(L.size()==0)
            break;
        string L1;
        for(int i=0;i<L.size();++i)
        {
            if(L[i]!=' ')
            {
                    L1=L1+L[i];
            }   
            else{
                    vstr.push_back(L1);
                    L1.clear(); 
            }
        } 
        vstr.push_back(L1);
        if(vstr.size()==0)
            break;
        stringVectorOperator(L) // 对这一行数据进行处理
    }

4.输入多行int类型的数据,每一行元素个数未知

输入例子如下:

1 2 3 4 5

2 3 4

3 4 5 6 7

目标:将每一行出现的数字按照次序存储进vector中

基本想法:

  • 先按照字符串的方法读入一行数据
  • 对这一行数据进行切割,分离出其中的数字

代码如下:

    while(1)
    {
        vector<int> vec;
        string L;
        getline(cin,L);
        if(L.size()==0)
            break; 
        int num=0;
        for(int i=0;i<L.size();++i)// 分离出数字
        {
            if(L[i]!=' ')
            {
                num=num*10+int(L[i]-'0');
            }else{
                vec.push_back(num);
                num=0;
            }

        }
        vec.push_back(num);
        cout<<vec.size()<<" "<<endl;
        for(int i=0;i<vec.size();++i)
        {
            cout<<vec[i]<<endl; 
        }
        cout<<"next"<<endl;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值