牛客C++输入输出总结

https://ac.nowcoder.com/acm/contest/5657#question

C++输入输出

字符串和数字转换

https://zhuanlan.zhihu.com/p/188390082

atoi(str)
stoi(str)
to_string(int)
C++如何逆序排序呢?
1.先reverse
2.写新的函数
3.end,begin??

1.循环输入两个数相加

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据包括多组。
输出描述:
输出a+b的结果
输入例子1:
1 5
10 20
输出例子1:
6
30
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int a,b;
    while(cin>>a>>b){
        cout<<a+b<<endl;
    }

    return 0;
}

2.先输入案例数,再输入案例

计算a+b

打开以下链接可以查看正确的代码

输入描述:
输入第一行包括一个数据组数t(1 <= t <= 100)
接下来每行包括两个正整数a,b(1 <= a, b <= 10^9)
输出描述:
输出a+b的结果
输入例子1:
2
1 5
10 20
输出例子1:
6
30
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int nums;
    cin>>nums;
    for(int i=0;i<nums;i++){
        int a,b;
        cin>>a>>b;
        cout<<a+b<<endl;
    }
    
    return 0;
}

3.

输入描述:
输入包括两个正整数a,b(1 <= a, b <= 10^9),输入数据有多组, 如果输入为0 0则结束输入
输出描述:
输出a+b的结果
输入例子1:
1 5
10 20
0 0
输出例子1:
6
30
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    long a,b;
    while(1){
        cin>>a>>b;
        if(a+b==0)
            return 0;
        cout<<a+b<<endl;
        
    }
    
    return 0;
}

4.

输入描述:
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
输入例子1:
4 1 2 3 4
5 1 2 3 4 5
0
输出例子1:
10
15
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int nums;
    cin>>nums;
    while(nums!=0){
        int addres=0;
        int tmp;
        for(int i=0;i<nums;i++){
            cin>>tmp;
            addres+=tmp;
        }
        cout<<addres<<endl;
        cin>>nums;
    }
    
    return 0;
}

5.

输入描述:
输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。
接下来t行, 每行一组数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
输入例子1:
2
4 1 2 3 4
5 1 2 3 4 5
输出例子1:
10
15
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int nums;
    cin>>nums;
    for(int i=0;i<nums;i++){
        int jlen;
        cin>>jlen;
        int addres=0;
        int tmp;
        for(int j=0;j<jlen;j++){
            cin>>tmp;
            addres+=tmp;
        }
        cout<<addres<<endl;
    }
    
    return 0;
}

6.循环输入案例

输入描述:
输入数据有多组, 每行表示一组输入数据。
每行的第一个整数为整数的个数n(1 <= n <= 100)。
接下来n个正整数, 即需要求和的每个正整数。
输出描述:
每组数据输出求和的结果
输入例子1:
4 1 2 3 4
5 1 2 3 4 5
输出例子1:
10
15
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
    int a,b;
    while(cin>>a){
        int sumres=0;
        for(int i=0;i<a;i++){
            cin>>b;
            sumres+=b;
        }
        cout<<sumres<<endl;
    }
    
    return 0;
}

7.完全不告诉有多少个案例,靠空行

输入描述:
输入数据有多组, 每行表示一组输入数据。

每行不定有n个整数,空格隔开。(1 <= n <= 100)。

输出描述:
每组数据输出求和的结果

输入例子1:
1 2 3
4 5
0 0 0 0 0

输出例子1:
6
9
0

1)通过cin.get=='\n'得到

cin.get()是保留回车在输入流队列中的,

而cin是丢弃回车的。

#include<iostream>
using namespace std;
 
int main()
{
    int temp,sum;
      
    while(cin>>temp)
    {  
        sum+=temp;
        if(cin.get()=='\n')////cin.get()是保留回车在输入流队列中的,可以识别空行和回车,正常输入后一定会有空格和回车
        {
            cout<<sum<<endl;//它必须在每行的循环体中,每行输出一个;输出条件为'\n'
            sum=0;//需要放在输出后面,防止多行加在一起
        }
          
    }
 
}

2)使用getline(cin,s),

stringstream 再输出

需要加入头 #include<bits/stdc++.h>

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
    
    string str;
    while(getline(cin,str)){
        stringstream s(str);
        int sum=0;
        int num=0;
        while(s>>num){
            sum+=num;
        }
        cout<<sum<<endl;
    }
    
    return 0;
}

8.字符串

输入描述:
输入有两行,第一行n

第二行是n个空格隔开的字符串

输出描述:
输出一行排序后的字符串,空格隔开,无结尾空格

输入例子1:
5
c d a bb e

输出例子1:
a bb c d e
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;

int main()
{
    int n;
    cin >> n;
    string s;
    vector<string>res;
    while (cin >> s)
    {
        res.push_back(s);

    }
    sort(res.begin(), res.end());
    for (int i = 0; i < n; i++)
    {
        cout << res[i] << ' ';
    }

}

9.

输入描述:
多个测试用例,每个测试用例一行。

每行通过空格隔开,有n个字符,n<100

输出描述:
对于每组测试用例,输出一行排序过的字符串,每个字符串通过空格隔开

输入例子1:
a c bb
f dddd
nowcoder

输出例子1:
a bb c
dddd f
nowcoder

cin.get()不是当前cin的内容,而是下一个内容。

cin.get()是保留回车在输入流队列中的,

而cin是丢弃回车的。

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
    string s;
    vector<string> tmp;
    while(cin>>s){
        tmp.push_back(s);
        if(cin.get()=='\n'){
            if(tmp.size()>0){
                sort(tmp.begin(),tmp.end());
                for(int i=0;i<tmp.size();i++){
                    cout<<tmp[i]<<" ";
                }
                cout<<endl;
                tmp.clear();
            }
        }
    }
    
    return 0;
}

10.逗号分割字符串


输入描述:
多个测试用例,每个测试用例一行。
每行通过,隔开,有n个字符,n<100

输出描述:
对于每组用例输出一行排序后的字符串,用','隔开,无结尾空格

输入例子1:
a,c,bb
f,dddd
nowcoder

输出例子1:
a,bb,c
dddd,f
nowcoder

↓我的做法

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
    vector<string> tmp;
    string s;
    int begin=0;
    int len=0;
    while(getline(cin,s)){
        for(int i=0;i<s.length();i++){
            if(s[i]==','){
                tmp.push_back(s.substr(begin,len));
                begin=i+1;
                len=0;
            }else{
                len+=1;
            }
        }
        tmp.push_back(s.substr(begin,len));
        sort(tmp.begin(),tmp.end());
        for(int i=0;i<tmp.size()-1;i++){
            cout<<tmp[i]<<",";
        }
        cout<<tmp[tmp.size()-1]<<endl;
        tmp.clear();
        begin=0;
        len=0;
    }
    
    
    return 0;
}

看起来stringstream会更方便

#include <bits/stdc++.h>
using namespace std;

int main()
{
    string s;
    while(getline(cin, s)){
        stringstream str(s);
        string temp;
        vector<string> res;
        while(getline(str, temp,',')){
            res.push_back(temp);
        }
        sort(res.begin(), res.end());
        for(int i=0; i<res.size(); i++){
            if(i==res.size()-1){
                cout<<res[i]<<endl;
            }
            else{
                cout<<res[i]<<',';
            }
        }
    }
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335