小技巧

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. 取仅包含指定字符集的字符串。如在下例中,取仅包含19和小写字母的字符串。
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];
}

results matching ""

    No results matching ""