问题一:如何连续输入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 << " ";
}