【数据结构】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模式总结
程序设计竞赛入门 —— 基本输入输出(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++
头文件
万能头文件
【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端查看)