编程中常遇到的细节问题

1、输入输出
#include<iostream>
using namespace std;
int n;
cin>>n;
cout<< n<<endl;

字符串
注意:cin提取始终将空格(空格,制表符,换行符...)视为终止要提取的值,因此提取字符串意味着始终提取单个单词,而不是短语或整个句子。
cin>>s

整行字符串输入使用getline()
string s;
while(getline(cin, s)) {

}

字符串流
#include<sstream>
stringstream

格式化输出
包含头文件 : #include<iomanip>
cout<<setiosflags(ios::fixed)<<setprecision(2);合在一起的意思就是输出一个右对齐的小数点后两位的浮点数。

1) 使用setprecision(n)可控制输出流显示浮点数的数字个数 C++默认的流输出数值有效位是6。setprecision(n)就是输出n个数,会有四舍五入。
2) setiosflags(ios::fixed)
setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。

eg:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() {
double s=20.7843000;
cout << s << endl;
cout << setiosflags( ios::fixed );
cout << "setprecision( 1 )"<< setprecision( 1 )<< s << endl;
cout << "setprecision( 2 )"<< setprecision( 2 )<< s << endl;
cout << "setprecision( 3 )"<< setprecision( 3 )<< s << endl;
cout << "setprecision( 4 )"<< setprecision( 4 )<< s << endl;
cout << "setprecision( 5 )"<< setprecision( 5 )<< s << endl;
cout << "setprecision( 6 )"<< setprecision( 6 )<< s << endl;
cout << "setprecision( 7 )"<< setprecision( 7 )<< s << endl;
cout << "setprecision( 8 )"<< setprecision( 8 )<< s << endl;
return 0;

}

输出:

20.7843
setprecision( 1 )20.8
setprecision( 2 )20.78
setprecision( 3 )20.784


2、将整数转换为字符串
int n;
string s = to_string(n);

3、substr用法

假设:string s = “0123456789”;
string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = “56789”
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = “567”


4、定义动态二维数组dp[m][n]
1) 使用vector
vector<vector<int> > dp(m, vector<int>(n)); //默认初始化为0
vector<vector<int> > dp(m, vector<int>(n, 1)); //全部初始化为1

5、使用指针

//申请空间
int ** p=new int *[rows];
for(int i=0; i<rows; i++) {
     p[i]=new int[columns];
}

//释放空间
for(int i=0; i<rows; i++) {
    delete [] p[i];
}
delete [] p;

6、指针初始化
int *pia = new int[10]; // 每个元素都没有初始化
int *pia2 = new int[10] (); // 每个元素初始化为0

7、
sqrt使用时大多需要要强制类型转化,因为sqrt只支持double和float类型
c=(int) sqrt((double)a*a+b*b);或者c=(int) sqrt((float)a*a+b*b);

8、遇到字符串相关问题可以考虑哈希表
字符串中出现的字符的 ASCII 码在 0 到 127 之间


9、最大最小值表示
#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000


10、创建pair对
queue<pair<int , int>>q;
q.push({i,j});
q.push(make_pair(i,j));
创建pair对,这两种写法 {i, j} 和 make_pair(i,j) 都可以

猜你喜欢

转载自www.cnblogs.com/sunshine1218/p/12507291.html