【数据结构】02.C++ ACM模式总结

【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM

【嵌入式八股】二、计算机基础篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym

【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM

【嵌入式八股】四、嵌入式Linux篇https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0

ACM模式总结

华为机试_在线编程_牛客网 (nowcoder.com)

卡码网

程序设计竞赛入门 —— 基本输入输出(C++)_哔哩哔哩_bilibili

C 语言

ACM竞赛之输入输出(以C与C++为例) - 腾讯云开发者社区-腾讯云 (tencent.com)

输入一个

#include<stdio.h>
scanf("%d", &a);
printf("%d", a);

固定输入n个

#include <stdio.h>

int main() {
	int n = 0, m = 0;		//n为学生数,m为操作数
	scanf("%d %d",&n, &m) ;
	int goal[n];
	for( i=0 ; i<n ; i++ )
	    scanf("%d",&goal[i]); //读入初始成绩
    char c;
    int a, b;
   	for( i=0 ; i < m ; i++ ) {
	    scanf("%c %d %d",&c, &a, &b); //读入初始成绩
	    //其他操作
	 }
	return 0;
}

不固定输入

#include <stdio.h>	
int main() {
   int a,b;
   while(scanf("%d %d", &a, &b) != EOF)
       printf("%d\n", a+b);

   return 0;
}

C++

头文件

万能头文件

实测牛客网赛码网ACM模式均可使用。VS需要自己配置。

【C++】万能头文件 <bits/stdc++.h> 的用法和优缺点_c++万能头文件优点缺点_一条余弦Cos的博客-CSDN博客

#include<bits/stdc++.h>  //万能头文件,它包括了绝大部分(注意不是所有)的头文件。

具体头文件

#include<iostream>   //输入输出流,使用cin,cout
#include<sstream>    //在<sstream>中有一个类 istringstream可以把字符串根据空格分开。
#include<string>     //调用字符串类型的变量
#include<math.h>     //各个数学函数:max(),min(),sqrt()....的头文件   
#include<vector>    
#include<algorithm>  //用于调用各种函数,如sort()
#include<limits.h>   //INT_MIN 和 INT_MAX的头文件  
#include<list>       //链表 
#include<map>        //图 
#include<queue>      //队列 
#include<iterator>   //迭代器 
#include<stack>      //栈 

using namespace std;

istringstream可以把字符串根据空格分开

C++中istringstream、ostringstream、stringstream详细介绍和使用_c++ istringstream_代码拌饭饭更香的博客-CSDN博客

#include <string>
#include <sstream>
#include <iostream>
using namespace std;

int main()
{
    string str="AA BB CC B 1 123 ";
    istringstream stream(str);//声明一个istingstream的对象,并且绑定一个字符串。
    string s;
    while(stream>>s){
        cout<<s<<endl;
    }
    return 0;
}

输入输出

输入 首先,在C++语言中,要使用标准的输入,需要包含头文件< iostream >

(1)cin cin是C++中, 标准的输入流对象,下面列出cin的两个用法,单独读入,和批量读入

cin的原理,简单来讲,是有一个缓冲区,我们键盘输入的数据,会先存到缓冲区中,用cin可以从缓冲区中读取数据。

注意1:cin可以连续从键盘读入数据

注意2:cin以空格、tab、换行符作为分隔符

注意3:cin从第一个非空格字符开始读取,直到遇到分隔符结束读取

(2)getline()

C++中getline()的用法_c++ getline头文件_Faith_xzc的博客-CSDN博客

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

从cin的注意中,也可以看出,当我们要求读取的字符串中间存在空格的时候,cin会读取不全整个字符串,这个时候,可以采用getline()函数来解决。

注意1:使用getline()函数的时候,需要包含头文件< string >

注意2:getline()函数会读取一行,读取的字符串包括空格,遇到换行符结束

(3)getchar()

该函数会从缓存区中读出一个字符,经常被用于判断是否换行

输出

同样的,在C++语言中,要使用标准的输出,也需要包含头文件<iostream>

输出这边,主要介绍一个函数,就是用的最多的cout,需要注意的是,如果输出endl对象的时候,会输出一个换行符,类似\n

1. 输入一个

1.1输入1个数
//输入1
int main() {
	int n = 0;
	cin >> n; 
    cout << n << endl;
    return 0;
}
//输入1
int main() {
	int n = 0;
	while (cin >> n) {         //循环读入一个数;
		cout << n << endl;
	}
	return -1;
}
1.2输入1个字符
//输入a
int main() {
	char ch;
	while (cin >> ch) {
		cout << ch << endl;
	}
	return -1;
}
1.3输入1个字符串
//输入abc
int main() {
	string str;
	while (cin >> str) {
		cout << str << endl;
	}
	return -1;
}

2. 固定输入n个

2.1读取n个数
//输入格式
//3
//1 2 3
int main() {
	int n = 0; 
	while (cin >> n) {   //每次读取1 + n 个数,即一个样例有n+1个数 
		vector<int> nums(n);
		for (int i = 0; i < n; i++) {
			cin >> nums[i];
		}
		//处理这组数/字符串
		for (int i = 0; i < n; i++) {
			cout << nums[i] << endl;
		}
	}
	return -1;
}
2.2读取n个字符
//输入格式
//3
//1 2 3
int main() {
	int n = 0;
	while (cin >> n) {  //输入数量
		vector<string> strs;
		for (int i = 0; i < n; i++) {
			string temp;
			cin >> temp;
			strs.push_back(temp);
		}
		//处理这组字符串
		sort(strs.begin(), strs.end());
		for (auto& str : strs) {
			cout << str << ' ';
		}
	}
	return 0;
}
2.3读取n个字符串
//输入格式
//3
//1 2 3
int main() {
    int n;
    cin >> n; // 读入3,说明字符串数组的大小是3
    vector<string> strings(n); // 创建大小为3的vector<string>
    for(int i = 0; i < n; i++) {
        cin >> strings[i];
    }

    // 验证是否读入成功
    for(int i = 0; i < strings.size(); i++) {
        cout << strings[i] << " ";
    }
    cout << endl;
}
2.4读取m行n列二维数组
//输入格式
//3
//1 2 3
int main() {
    int m; // 接收行数
    int n; // 接收列数

    cin >> m >> n;

    vector<vector<int>> matrix(m, vector<int>(n));

    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cin >> matrix[i][j];
        }
    }

    // 验证是否读入成功
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
}

带逗号字符串转

下面的也可以用stringstream

//输入格式:每一行数据是逗号隔开的整数
//2 3
//1,2,3
//1,2,3
int m; // 接收行数
int n; // 接收列数

cin >> m >> n;

vector<vector<int>> matrix(m);

for(int i = 0; i < m; i++) {
    // 读入字符串
	string s;
	getline(cin, s);
	
	// 将读入的字符串按照逗号分隔为vector<int>
	vector<int> vec;
	int p = 0;
	for(int q = 0; q < s.size(); q++) {
		p = q;
		while(s[p] != ',' && p < s.size()) {
			p++;
		}
		string tmp = s.substr(q, p - q);
		vec.push_back(stoi(tmp));
		q = p;
	}
	
	//写入matrix
	matrix[i] = vec;
	vec.clear();
}

// 验证是否读入成功
for(int i = 0; i < matrix.size(); i++) {
	for(int j = 0; j < matrix[i].size(); j++) {
		cout << matrix[i][j] << " ";
	}
	cout << endl;
}

3. 不固定输入

3.1读数

==使用getchar() 或者 cin.get() 读取判断是否是换行符,若是的话,则表示该组数(样例)结束了,需进行处理==

//输入格式
//1 2 3 4
vector<int> nums;
int num;
while(cin >> num) {
	nums.push_back(num);
	// 读到换行符,终止循环
	if(getchar() == '\n') {
		break;
	}
}

// 验证是否读入成功
for(int i = 0; i < nums.size(); i++) {
	cout << nums[i] << " ";
}
cout << endl;
3.2读字符
//输入格式
//a b c d
vector<char> chars;
int ch;
while(cin >> ch) {
	chars.push_back(ch);
	// 读到换行符,终止循环
	if(getchar() == '\n') {
		break;
	}
}

// 验证是否读入成功
for(int i = 0; i < chars.size(); i++) {
	cout << chars[i] << " ";
}
cout << endl

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础【本专栏】 3.硬件篇 4.嵌入式Linux (建议PC端查看)

全部评论
为什么手撕算法总结仅作者可见?
点赞 回复 分享
发布于 2024-09-10 09:31 湖北

相关推荐

高斯林的信徒:问你有没有保底,好人啊,就差把这是kpi面告诉你了
点赞 评论 收藏
分享
评论
6
52
分享

创作者周榜

更多
牛客网
牛客企业服务