C++输入流与输出流

标题(C++输入与输出)

一、输入流

1、字符串输入:

cin使用空白(空格、制表符和换行符)来确定字符串的结束位置。字符串的输入:

#include <iostream>
using namespace std;
int main()
{
	const int ArSize= 20;
	char name[ArSize];
	cin >> name; //输入字符串,遇到空白自动结束输入

}
结果:
输入:James Larban
输出:James

2、每次读取一行字符串:

①、面向行的输入:getline()
getline()通过回车键换行符来结束输入,采用cin.getline(array_name,char_parameter_number)

#include <iostream>
int main()
{
    using namespace std;
    const int ArSize = 20;
    char name[ArSize];
    cin.getline(name, ArSize); //输入字符串,遇到换行符或数目到达设定值,输入结束
    cout  << name << endl;
    return 0;
}
结果:
Dirk Hammernose_Simth
Dirk Hammernose_Sim

getline()成员函数在读取函数指定数目的字符或遇到换行符时停止读取。getline()函数每次读取一行,通过换行符来确定行尾,但不保存换行符;相反,在存储字符串时,它用空字符来替换换行符。
②、面向行的输入:get()
cin.get(name,ArSize);
cin.get(dessert,ArSize); //将读取一个空行
不带任何参数cin.get()可读取下一个字符(即使是换行符)
cin.get(name,ArSize); //读取第一行
cin.get(); //读取新的一行
cin.get(name,ArSize); //读取第二行
上面可采用另一种实现方式:
cin.get(name,ArSize).get();
将把输入中连续的两行分别读入到数组name1和name2中,效果与两次调用getline()一样:cin.getline(name1,ArSize).getline(name2,ArSize);

#include <iostream>
int main()
{
    using namespace std;
    const int ArSize = 20;
    char name[ArSize];

    cin.getline(name, ArSize).get(); //读取字符串,新一行
    cout  << name << endl;
    return 0;
}
结果:
Mjas Parfair
Simith Hadeng     //两行输入,中间有换行符
Mjas Parfair

结论:getline()与get()都读取一行输入,直到到达换行符。但是,getline()将丢弃换行符,而get()将换行符保留在输入序列中。
③、空行
get()(不是getline())读取空行后设置失效 位(接下来输入被阻断);采用cin.clear()恢复输入。
④、其他

3、混合输入字符串和数字:

如何同时输入数字和字符串:

#include <iostream>
int main()
{
    using namespace std;
    const int ArSize = 80;
    char name[ArSize];

    cout << "请输入学校建立年份:"<<endl;
    int year;
    cin >> year;
    cin.get(); //如果没有这一句话,将会在输入行有换行符
    //或者使用一个接受char参数的get();cin.get(char);
    //或者也可以采用cin>>year返回一个cin对象,即为:(cin>>year).get();或者(cin>>year).get(char)
    //此处必须有cin.get(); 否则在下面的输入还没有输入就已经结束输入(即输入为空)
    cout << "请输入学校地址:" <<  endl;
    char address[ArSize];
    cin.getline(address, ArSize);
    cout  << "建校年份:" <<  year << "学校地址:" <<  address <<  endl;
    return 0;
}
结果:
请输入学校建立年份:
1923
请输入学校地址:
辽宁省沈阳市和平区文化路三巷十一号
建校年份:1923学校地址:辽宁省沈阳市和平区文化路三巷十一号

4、多行输入字符串

string str[3];
for(int i = 0; i < 3; i++)
    getline(cin,str[i]);

有些题目需要你先输入字符串的行数,然后再接着输入字符串,在采用cin>>name;后,输入行还保留着换行符 ,所有在下一次输入前将会读取此换行符,即下一个读取将会是空行,因此可以采用cin.ignore();解决此问题,解决思路与上面的(cin>>name).get(char);一样。

int N;
cin >> N;
cin.ignore(); // 取消换行的读入
string strCinLine[N];
for(int i =0; i < N;++i)
    getline(cin,strCinLine[i]);

二、输出流

输出流比较简单,直接输出即可 !!!

牛客题目:

计算一系列数的和

1、输入第一行包括一个数据组数t(1 <= t <= 100),接下来每行包括两个正整数a,b(1 <= a, b <= 10^9);
输出描述:输出a+b的结果
示例1:
输入:
2
1 5
10 20
输出:
6
30

#include <iostream>

int main()
{
    using namespace std;
    struct Array
    {
        int a;
        int b;
    };
    
    int num;
    cin>>num;
    Array A[num];
    for(int i=0;i<num;i++)
    {
        cin>>A[i].a;
        cin>>A[i].b;
    }
    for(int j=0;j<num;j++)
    {
        cout << A[j].a +A[j].b << endl;
    }
    return 0;
}

此处最好用vector代替struct。
2、输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入。
输入:
1 5
10 20
0 0
输出:
6
30

#include <iostream>

int main()
{
    using namespace std;
    int a,b;
    while(cin>>a>>b)
    {
        if(a==0 && b==0)
            break;
        else
            cout << a + b <<  endl;
    }
    return 0;
}

3、
输入数据包括多组。每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。接下来n个正整数,即需要求和的每个正整数。
输入:
4 1 2 3 4
5 1 2 3 4 5
0
输出:
10
15

#include <iostream>
int main()
{
    using namespace std;
    int a;
    while(cin>>a)
    {
        if(a==0)
        {
            return 0;
        }
        int  n;
        long sum=0; //此处需要把sum初始化为0
        while(a--)
        {
            cin >> n;
            sum += n;
        }
        cout << sum << endl;
    }
    return 0;
}

4、输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。接下来t行, 每行一组数据。每行的第一个整数为整数的个数n(1 <= n <= 100)。接下来n个正整数, 即需要求和的每个正整数。
例如:
输入:
2
4 1 2 3 4
5 1 2 3 4 5
输出:
10
15

#include <iostream>
int main()
{
    using namespace std;
    unsigned int t;
    unsigned int a,b;
    long Sum=0;
    cin >> t;
    while(t--)
    {
        cin>>a;
        while(a--)
        {
            cin >> b;
            Sum += b;
        }
        cout << Sum << endl;
        Sum = 0;  //初始化
    }
    return 0;
}

5、输入数据有多组, 每行表示一组输入数据。每行的第一个整数为整数的个数n(1 <= n <= 100)。接下来n个正整数, 即需要求和的每个正整数。
例如:
输入:
4 1 2 3 4
5 1 2 3 4 5
输出:
10
15

#include <iostream>
#include <vector>
int main()
{
    using namespace std;
    vector<int> result;
    int n,num;
    int  Sum = 0;
    while(cin>>n)
    {
        if(n == NULL)
            break;
        else
        {
            while(n--)
            {
                cin>>num;
                Sum += num;
            }
            result.push_back(Sum);
            Sum = 0;
        }
    }
    for(int i=0; i<result.size();i++)
    cout << result[i] << endl;
    return 0;
}

6、输入数据有多组, 每行表示一组输入数据。每行不定有n个整数,空格隔开。(1 <= n <= 100)。
例如:
输入:
1 2 3
4 5
0 0 0 0 0
输出:
6
9
0

#include <iostream>
int main()
{
    using namespace std;
    int n,num;
    int  Sum = 0;
    while(cin>>n)
    {
        Sum =  n;  //将第一个数据计算到结果中
        while(cin.get() != '\n')
        {
            cin >> num;
            Sum += num;
        }
        cout << Sum << endl;
        Sum = 0;
    }
    return 0;
}
字符串排序

1、输入有两行,第一行n;第二行是n个空格隔开的字符串。输出一行排序后的字符串,空格隔开,无结尾空格。
例如:
输入:
5
c d a bb e
输出:
a bb c d e

#include <iostream>
#include <vector>
#include  <string>
#include <algorithm>

int main()
{
    using namespace std;
    unsigned int count;
    vector<string> input;
    string s;

    cin>>count;
    cin.ignore();
    for(int i = 0; i< count;i++)
    {
        cin >> s;
        input.push_back(s);
    }
    sort(input.begin(),input.end());
    for(auto item: input) //遍历容器s所有元素
    {
        cout << item << " ";
    }
    cout << endl;
    return 0;
}

2、多个测试用例,每个测试用例一行。每行通过空格隔开,有n个字符,n<100。(对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开)
例如:
输入:
a c bb
f dddd
nowcoder
输出:
a bb c
dddd f
nowcoder

#include <iostream>
#include <vector>
#include  <string>
#include <algorithm>

int main()
{
    using namespace std;
    vector<string> input;
    string s,temp;
    while(cin>>s) //输入每一个数组的第一个元素
    {
        temp = s;
        input.push_back(temp);
        while( cin.get() != '\n')
        {
            cin>>temp;      //继续读取元素
            input.push_back(temp); //将元素添加到容器中
        }
        sort(input.begin(),input.end()); //排序
        for(auto item:input)    //遍历
            cout << item << " ";
        cout <<  endl;
        input.clear();
    }
    return 0;
}

3、多个测试用例,每个测试用例一行。每行通过,隔开,有n个字符,n<100。(对于每组用例输出一行排序后的字符串,用’,'隔开,无结尾空格)
例如:
输入:
a,c,bb
f,dddd
nowcoder
输出:
a,bb,c
dddd,f
nowcoder

#include <iostream>
#include <vector>
#include  <string>
#include <algorithm>

int main()
{
    using namespace std;
    vector<string>input;
    string str;
    char c;
    while(cin.get(c))
    {
        if(c == ',')
        {
            input.push_back(str);
            str = "";
        }
        else if(c == '\n')
        {
            input.push_back(str);
            str = "";
            sort(input.begin(),input.end());
            for(int i=0; i<input.size() - 1;i++) //输出到倒数第二个数
            {
                cout<<input[i]<<',';
            }
            cout<<input[input.size() - 1]<<endl;//输出最后一个数,防止最后输出','
            input.clear();
        }
        else
            str += c;
    }
    return 0;
}

谢谢观看 !!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值