0. 常用头文件
#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <string>
#include<sstream>
#include <unordered_map>
using namespace std;
1. 字符串的读取
每行输入一个字符串
int n;
cin >> n;
vector<string> A;
for (int i = 0; i < n; i++)
{
string str;
cin >> str;
A.push_back(str);
}
1.1 字符串读取,以“,” 作为间隔
示例:
a,c,bb
f,dddd
nowcoder
这里使用substr 函数进行分割:
string s;
vector<string> A;
vector<vector<string>> ans;
while (cin >> s)
{
A.push_back(s); // 读取一行 字符串
}
for (int i = 0; i < A.size(); i++)
{
int pos=0;
vector<string> res;
while (pos != -1) // 能找到就一直迭代
{
pos = A[i].find(','); // 找到“,”
string temp = A[i].substr(0, pos); 分割 , 前面的字符串
res.push_back(temp);
A[i] = A[i].substr(pos + 1); // A[i] 继续迭代为,后面的字符串
}
ans.push_back(res);
}
2. 一维vector 的输入
第一行 输入数组的长度N,第二行输入 vector 的数值。
int n = 0;
cout << "输入数组的行数:"<<endl;
cin >> n;
vector<int> A;
for (size_t i = 0; i < n; i++)
{
int value;
cin >> value;
A.push_back(value);
}
3. 二维vector 的输入
第一行 输入数组的长度N和M,每一行输入数组的行的元素
N=2, M=2
1 1 // 代表第一行的元素
2 2 // 代表第二行的元素
int n = 0,m=0;
cout << "输入数组的行数和列数:"<<endl;
cin >> n>>m;
vector<vector<int>> A;
vector<int> temp;
int value;
for (size_t i = 0; i < n; i++)
{
temp.clear(); // 用完之后 记得清空
for (size_t j = 0; j < m; j++)
{
cin >> value;
temp.push_back(value);
}
A.push_back(temp);
}
4. 二维vector 的输入
输入一行数据,[[5, 4], [6, 3], [6, 7], [6, 6], [4, 6]] 这种形式的二维数组
string str;
getline(cin, str);
vector<vector<int>> A; //存放二维数组
vector<int> tem;
int value;
while (str.size() > 2)
{
int pos = str.find(']');
string temp = str.substr(2, pos - 2);
str = str.substr(pos + 2);
pos = temp.find(',');
int a = stoi(temp.substr(0, pos));
temp = temp.substr(pos + 1);
int b = stoi(temp);
tem.push_back(a);
tem.push_back(b);
A.push_back(tem);
tem.clear();
}
4. 二维vector 以字符串的形式输入[ ,之后没有空格有空格都可以]
比如:1,2,34,12,12
2,1,22,23
vector<string> s; // 存放字符串的vector
int N, k;
cin >> N>>k ;
cin.ignore(); // 请空 cin 缓存区的内容,不然会报错
while (N--)
{
string str;
getline(cin,str); // 取第一行字符串
// 如果,后有空格 cin>>str 就失效
s.push_back(str);
}
vector<vector<int>> res;
for (int i = 0; i < s.size(); i++)
{
int pos = 0;
vector<int> ans;
while (pos != -1) {
pos = s[i].find(',');
string temp = s[i].substr(0, pos); // 刚好取到 , 前一个
int a = stoi(temp); // 字符串直接转化为 数字
ans.push_back(a);
s[i] = s[i].substr(pos + 1); // s[i] 迭代到 , 的后一个元素之后
}
res.push_back(ans);
}
5. 动态规划创建二维数组
int size = str.size();
vector<vector<bool>> dp(size,vector<bool>(size)); // 初始化二维数组
6. 创建二维数组
输入数据包括多组。
每组数据一行,每行的第一个整数为整数的个数n(1 <= n <= 100), n为0的时候结束输入。
接下来n个正整数,即需要求和的每个正整数。
输入:
4 1 2 3 4
5 1 2 3 4 5
0
int a =0;
int sum =0;
while(cin>>a && a)
{
sum =0;
vector<int> A;
for(int i=0 ; i<a;i++)
{
int value;
cin >> value;
sum += value;
}
cout<<sum<<endl;
}
6. 输入任意行任意列的二维数组
输入:
1 2 3
4 5
0 0 0 0 0
#include<iostream>
#include <string>
#include <vector>
using namespace std;
int main ()
{
vector<vector<int>> A;
vector<int> tmp;
int value,sum=0;
while (cin>>value)
{
tmp.push_back(value);
sum+=value;
if (getchar() == '\n')
{
A.push_back(tmp);
tmp.clear();
cout<<sum<<endl;
sum=0;
}
}
return 0;
}