【数据结构】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 湖北

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
6
52
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务