Skip to content

笔试输入输出

头文件

//笔试时候常用的输入输出,可以使用
#include <bits/stdc++.h>

//来一次性输入所有的C++头文件包括:

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>

一维数组输入

//空格分割
//6
//1 2 3 4 5 6

int num;
cin >> num;
vector<int> nums;
int temp_num;
for (int i = 0; i < num; i++)
{
    cin >> temp_num;
    nums.push_back(temp_num);
}

//逗号分割
//5
//1,2,3,4,5

int num;
cin >> num;
vector<int> nums;
int temp_num;
for (int i = 0; i < num-1; i++)
{
    char a;
    cin >> temp_num >>a;
    nums.push_back(temp_num);
}
cin >> temp_num;
nums.push_back(temp_num);

二维数组输入

//2 3
//56 78
//23 45 12
int m, n;
cin >> m >> n;
vector<vector<int>> p(m, vector<int>(n));
for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
        cin >> p[i][j];

输入字符串,有空格

string str;
// cin >> str;          输入 uuu ioi 输出 uuu
//getline(cin, str);    输入 i love you 输出 i love you
getline(cin, str);

以‘ ,’ 分割字符串输入

//zhoulifeng,wangziling,rx
char str[3][11]; 
cin.getline(str[0], 11, ',');  //接收最多10个字符 ,以‘,’作为结束符
cin.getline(str[1], 11, ',');
cin.getline(str[2], 11);     //默认结束符 enter

多组输入,几组不确定

/*
2
67 89
4
12 34 56 78
...
*/
vector<vector<int>> a;
int n;
while (cin >> n) {    //遇到文件结束符停止,windods命令行输入文件结束符,ctrl+z然后enter
    vector<int> b(n,0);
    for (int i = 0;i < n;i++)
        cin >> b[i];
    a.push_back(b);
}

一行数据不确定多少,以enter结尾

//1 2 3 4 5...
//8 9 6...
int m, n;
vector<int>a, b;
while (cin >> m) 
{
    a.push_back(m);
    if (cin.get() == '\n') break;
}
while (cin >> n) 
{
    b.push_back(n);
    if (cin.get() == '\n') break;
}

使用C++的stringstream流

#include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> vec;
    string stmp;
    int itmp;

    cin>>stmp;

    replace(stmp.begin(), stmp.end(), ',', ' ');//#include <algorithm>
    // for(int i=0;i<stmp.size();++i){
    //     if(stmp[i] == ',')    stmp[i] = ' ';
    // }
    stringstream ss;//#include <sstream>
    ss<<stmp;
    while(ss>>itmp){
        vec.push_back(itmp);
    }
    ss.clear();

    cout << "输出" << endl;
    for (int i = 0; i < vec.size(); ++i){
        cout << vec[i] << " ";
    }
    cout << endl;
    return 0;
}

1,2,3,4
输出
1 2 3 4
请按任意键继续. . .

读取以逗号分隔的一串数字

#include<iostream>
#include<vector>
#include<sstream>

using namespace std;
int main()
{
    string s;
    vector<int> v;
    getline(cin, s);
    istringstream is(s);
    int inter;
    char ch;
    while (is >> inter)
    {
         v.push_back(inter);
         is >> ch;
    }
    for(int i=0;i<v.size();i++)
        cout<<v[i]<<" ";
    cout<<endl;
    return 0;
}

未告知输入个数,以回车结束

vector<int> vec;
int tmp;
char ch = 'a';
for (int i = 0; i<100 && ch != '\n'; i++)
{
    scanf_s("%d", &tmp, 1);//数字
    //cout << "get_tmp:" << tmp << " ";
    ch = getchar(); //空格或逗号
    //cout << "get_ch:" << ch << endl;
    vec.push_back(tmp);
} 
cout << endl;

输入字符串,读入是数字的部分

#include <iostream.h>
int main()
{
    char a[50]="1ab2cd3ef45g";
    char b[50];
    int cnt_index=0,cnt_int=0;
    //cnt_int 用于存放字符串中的数字.
    //cnt_index 作为字符串b的下标.

    for(int i=0;a[i]!='\0';++i) //当a数组元素不为结束符时.遍历字符串a.
    {
        if(a[i]>='0'&& a[i]<='9') //如果是数字.
        {
            cnt_int*=10;
            cnt_int+=a[i]-'0'; //数字字符的ascii-字符'0'的ascii码就等于该数字.
        }

        else if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z')) //如果是字母.
        {
            b[cnt_index++]=a[i]; //如果是字符,则增加到b数组中.
        }
    }

    b[cnt_index++]='\0'; //增加字符串结束符.

    cout<<b<<endl; //输出字符串. (abcdefg)
    cout<<cnt_int<<endl; //输出数字.(12345)
    return 0;
}