小技巧
string构造函数
string(原串,开始位置,开始位置后的长度)
例子:
string s1="123456789";
string s2(s1,3,5);//代表:45678
字符串转int
atoi();//普通char*型
atoi(str.c_str());//string类型
sscanf和sprintf的用法
sscanf 读取格式化的字符串中的数据
//1、一般用法
char buf[512] = ;
sscanf("123456 ", "%s", buf);
printf("%s\n", buf);
//结果为:123456
//2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
//结果为:1234
//3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
////结果为:123456
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf);
//结果为:123456abcdedf
//5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf);
///结果为:123456abcdedf
sprintf可以把一个数字转换乘字符串
int n=12345;
char s[100];
sprintf(s,"%d",n);
int转string
string get_s(int n)
{
stringstream ss;
string str;
ss<<n;
ss>>str;
return str;
}
define中##
的用法
是直接连接的意思,有时候会起到意想不到的作用
#include <stdio.h>
#define WTF(x) 1##x
int main()
{
printf("%d\n",WTF(3));//输出13,直接连接的意思
return 0;
}
快排模板
void qsort(int A[], int l, int r)
{
if(l >= r) return ;
int m = l-1;
for(int i=l; i<=r; i++)
if(A[i] <= A[r])
swap(A[++m], A[i]);
qsort(A, l, m-1);
qsort(A, m+1, r);
}
方格旋转:
void rot(int x, int y) //顺时针旋转
{
char t[5][5];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
t[j][1 - i] = s[x + i][y + j];
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
s[x + i][y + j] = t[i][j];
}