c++学习笔记

问题一:如何连续输入N个数字,数字之间以空格分隔,以回车结束,使用Vector<int>存储。

	vector<double> v1;
	char t;
	double count;
	double temp;
	while (cin >> temp) {
		v1.push_back(temp);
		if (getchar() == '\n') //遇回车结束
			break;
	
	}

问题二:字符串分割函数

//flag为分隔符
void solve(string str, vector<string> &words,char flag) //产生所有单词words
{
	string w;
	int i = 0;
	int j = str.find(flag);	//查找第一个空格
	while (j != -1)		//找到单词后循环
	{
		w = str.substr(i, j - i);	//提取一个单词
		words.push_back(w);	//单词添加到words中
		i = j + 1;
		j = str.find(flag, i);	//查找下一个空格
	}
	if (i<str.length() - 1)	//处理最后一个单词
	{
		w = str.substr(i);	//提取最后一个单词
		words.push_back(w);	//最后单词添加到words中
	}
}


问题三:cin.ignore()它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。

例,按行读入:

int line = 0;
	string start = "";
	string end = "";
	cin >> line >> start >> end;
	cin.ignore();//不加,上一行的输入被计算到下一行的输入
	
	string temp = "";
	vector<string> input_data;
	vector<vector<string>> Input_task;
	for (int i = 0; i < line; i++) {
		getline(cin, temp);
		solve(temp, input_data,',');
		Input_task.push_back(input_data);

	}

	for (int i = 0; i < Input_task.size(); i++)
	{
		for (int j = 0; j < Input_task[i].size(); j++) {
		
			cout << Input_task[i][j]<<endl;
		
		
		}
	}

问题四:钥匙问题

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <sstream>
using namespace std;

//flag为分隔符,字符串分割
void solve(string str, vector<string> &words,char flag) //产生所有单词words
{
	string w;
	int i = 0;
	int j = str.find(flag);	//查找第一个空格
	while (j != -1)		//找到单词后循环
	{
		w = str.substr(i, j - i);	//提取一个单词
		words.push_back(w);	//单词添加到words中
		i = j + 1;
		j = str.find(flag, i);	//查找下一个空格
	}
	if (i<=str.length() - 1)	//处理最后一个单词
	{
		w = str.substr(i);	//提取最后一个单词
		words.push_back(w);	//最后单词添加到words中
	}
}

//字符串转数字
int str2num(string s)
{
	int num;
	stringstream ss(s);
	ss >> num;
	return num;
}

//结构体
struct record
{
	int id = 0;
	int start = 0;
	int end = 0;
};


int main() {


	int N = 0;
	int K = 0;
	cin >> N >> K;
	cin.ignore();
	string temp;
	vector<int> classTag;
	vector<string> input_data;
	vector<record> records(K);
	vector<record> aginRecord;
	vector<record> passRecord;
	record tempRecord;
	for (int i = 0; i <= N; i++)
		classTag.push_back(i);
        //按行读入
	for (int i = 0; i < K; i++) {
		
		getline(cin, temp);
		solve(temp, input_data, ' ');
		records[i].id =  str2num(input_data[0]);
		records[i].start = str2num(input_data[1]);
		records[i].end = str2num(input_data[2])+ records[i].start;
		input_data.clear();
		

	}
//排序	
int size = 0;
	for (int i = 0; i < records.size(); i++) {
		for (int j = i + 1; j < K; j++) {
			if (records[i].start>records[j].start) {
				tempRecord = records[i];
				records[i] = records[j];
				records[j] = tempRecord;

			}


		}



	}




	do {
		aginRecord.clear();
		 size= records.size();
		for (int i = 0; i < size; i++) {
			for (int j = 1; j <= N; j++) {
				if (records[i].id == classTag[j]) {
					classTag[j]=0; 
					passRecord.push_back(records[i]);
					break;
				}
				
				if (j + 1 > N) {
					aginRecord.push_back(records[i]);
					

				}
			}
		}

		 tempRecord = passRecord[0];
		for (int i = 0; i < passRecord.size(); i++) {
			for (int j = i + 1; j < passRecord.size(); j++) {
				if ((passRecord[i].end>passRecord[j].end)||(passRecord[i].end==passRecord[j].end&&passRecord[i].id>passRecord[j].id)) {
					tempRecord = passRecord[i];
					passRecord[i] = passRecord[j];
					passRecord[j] = tempRecord;

				}

				


			}



		}

		for (int i = 0; i < passRecord.size(); i++) {

			for (int j = 1; j <= N; j++) {
				if (classTag[j] == 0) {
					classTag[j] = passRecord[i].id;
					break;

				}


			}


		}
		
		if (aginRecord.size() != 0)
		{
			records.clear();
			passRecord.clear();
			records = aginRecord;
		}
	} while (aginRecord.size()!=0);




	


	for (int i = 1; i <= N; i++) {
	
		cout << classTag[i] << " ";
	}

	system("pause");
	return 0;
}

问题五:Map容器初始化数据默认为0,通过下标对输入数字,统计出现次数

int n;
	cin >> n;
	map<int, int> f;
	f[0];//默认值为0
	for (int i = 0; i < n; i++)
	{
		int t;
		cin >> t;
		f[t]++;
	}

问题六:输入字符串转为数字:

        string s;
	cin >> s;
	a[0] = s[0] - '0';字符串转换为整数,字符串减法为ASCLL码相减,之差为整型
	a[1] = s[2] - '0';
	a[2] = s[3] - '0';
	a[3] = s[4] - '0';
	a[4] = s[6] - '0';
	a[5] = s[7] - '0';
	a[6] = s[8] - '0';
	a[7] = s[9] - '0';
	a[8] = s[10] - '0';
	a[9] = s[12] - '0';

数字转字符串:

int a=1;
char b= '0'+a

map转vector

        typedef pair<int, int> PAIR;

vector<PAIR> name_score_vec(num.begin(), num.end());

    sort(name_score_vec.begin(), name_score_vec.end(), cmp_by_value);
	for (int i = 0; i < num.size(); i++)
	{
		cout << name_score_vec[i].first << " ";
		
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值